Nice programing

주석을 추가하면 파서가 중단되는 이유는 무엇입니까?

nicepro 2020. 10. 26. 21:02
반응형

주석을 추가하면 파서가 중단되는 이유는 무엇입니까?


</script>주석을 추가 하면 파서가 중단되는 이유는 무엇 입니까? 이것은 버그입니까 아니면 내가 간과 한 문서에 무언가가 있습니까?

나는 이것을 Chrome, Firefox, Opera, Internet Explorer에서 테스트했으며 모두 동일한 결과를 생성합니다.

한 줄 주석 :

function Foo(){
  // </script>
  alert("bar");
};

Foo();

여러 줄 주석 :

function Foo(){
  /*
      </script>
  */
  alert("bar");
};

Foo();


이것은 W3C에서 정의한 HTML 파서가 JavaScript 파서와 완전히 분리되어 있기 때문에 발생합니다. <script>태그 뒤에는 </script>JS 코드를 일반 텍스트로 취급하기 때문에 주석이나 문자열 내부에 있든 상관없이 닫는을 찾습니다 .


HTML 구문 분석기는 JavaScript를 구문 분석하지 않습니다. <tag></tag>태그로 표시된 HTML 요소 만 구문 분석 합니다. 무언가가 JavaScript 주석이라는 사실은 모릅니다. 가 볼 때 </script>닫는 태그를,이 스크립트 요소가 폐쇄되고 가정합니다. 문자열이 </script>나타나는 모든 컨텍스트에서 동일하게 발생합니다 . 예를 들어 console.log("</script>")동일한 동작을 생성합니다.

이것은 HTML 내부에 스크립트를 포함하는 것이 아니라 외부 적으로 포함하는 것이 좋은 이유입니다.


포함 된 JavaScript 코드를 HTML로 이스케이프 할 수 있습니다.

<script type="text/javascript">
<!--

function Foo(){
 // </script>
  alert("bar");
};

Foo();

//-->
</script>

따라서 전체 JavaScript 코드는 HTML 파서에서 HTML 주석으로 처리되고 HTML 주석 행은 JavaScript 인터프리터에서 무시됩니다.


더 쉬운 해결 방법은 주석을 포함하는 것입니다.

function Foo(){
  //<!-- </script> -->
  alert("bar");
};

Foo();

javascript 및 html에 대한 줄을 주석으로 처리합니다.

참고 URL : https://stackoverflow.com/questions/32860237/why-does-adding-script-in-a-comment-break-the-parser

반응형