[javascript] 스크립트 태그 내에서 CDATA 섹션은 언제 필요합니까?

인가 CDATA의 태그 그래서 스크립트 태그 그리고 만약 적 필요?

다른 말로하면, 언제, 어디서?

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

이것보다 선호 :

<script type="text/javascript">
...code...
</script>



답변

당신이 XML로 구문 분석에 문서를해야 할 경우 CDATA 섹션이 필요합니다 (예를 들어, XHTML은 페이지가 XML로 해석됩니다 경우) 당신은 문자 그대로 쓸 수 있기를 원하는 i<10a && b대신 i&lt;10하고a &amp;&amp; b , XHTML은 구문 분석 된 문자 데이터로 자바 스크립트 코드를 파싱로 기본적으로 문자 데이터와 반대입니다. 이것은 외부 소스 파일에 저장된 스크립트의 문제는 아니지만 XHTML의 인라인 JavaScript의 경우 아마도 경우 CDATA 섹션을 사용하고 싶을 .

많은 XHTML 페이지는 결코 XML로 파싱되도록 ​​의도되지 않았으며,이 경우에는 문제가되지 않습니다.

주제에 대한 글을 잘 작성하려면 https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm을 참조 하십시오.


답변

브라우저가 마크 업을 XML로 취급하는 경우 :

<script>
<![CDATA[
    ...code...
]]>
</script>

브라우저가 마크 업을 HTML로 취급하는 경우 :

<script>
    ...code...
</script>

브라우저가 마크 업을 HTML로 취급하고 XHTML 1.0 마크 업 (예 :)을 검증하려는 경우.

<script>
//<![CDATA[
    ...code...
//]]>
</script>


답변

HTML

HTML 파서는 스크립트 사이 <script></script>스크립트의 일부로 모든 것을 처리 합니다. 일부 구현에는 올바른 닫기 태그가 필요하지 않습니다. ” </” 에서 스크립트 해석을 중지 합니다 . 이는 사양 에 따라 맞습니다 .

업데이트 에서 HTML5는 현재 브라우저, 그 이상이 아니다.

따라서 HTML에서는 불가능 합니다.

<script>
var x = '</script>';
alert(x)
</script>

CDATA섹션이 없습니다 전혀 영향을 . 그렇기 때문에 글을 써야합니다

var x = '<' + '/script>'; // or
var x = '<\/script>';

또는 유사합니다.

이는 다음과 같이 제공되는 XHTML 파일에도 적용됩니다. text/html . IE는 XML 콘텐츠 형식을 지원하지 않기 때문에 대부분의 경우에 해당합니다.

XML

XML에서는 다른 규칙이 적용됩니다. XHMTL 문서가 XML 컨텐츠 유형으로 제공되는 경우 (비 IE) 브라우저는 XML 구문 분석기 만 사용합니다.

XML 파서에서 script태그는 다른 태그보다 낫지 않습니다. 특히, 스크립트 노드는 ” <” 에 의해 트리거 된 텍스트가 아닌 자식 노드를 포함 할 수 있습니다 . 그리고 “& “기호는 문자 엔터티를 나타냅니다.

따라서 XHTML에서는 불가능 합니다.

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

이 문제를 해결하기 위해 전체 스크립트를 CDATA섹션으로 묶을 수 있습니다 . 파서에게 ‘이 섹션에서 <“와 ” &“를 제어 문자로 취급하지 마십시오 . ” JavaScript 엔진이 ” <![CDATA[“및 ” ]]>“표시 를 해석하지 못하도록 주석으로 묶을 수 있습니다.

스크립트에 ” <“또는 ” &“가 포함되어 있지 않으면 CDATA섹션이 필요하지 않습니다 .


답변

기본적으로 XHTML과 HTML 인 문서를 작성할 수 있습니다. 문제는 XHTML 내에서 XML 파서가 스크립트 태그 의 &, <,> 문자를 해석하여 XML 파싱 오류를 발생 시킨다는 것 입니다. 따라서 엔티티를 사용하여 JavaScript를 작성할 수 있습니다. 예 :

if (a &gt; b) alert('hello world');

그러나 이것은 비현실적입니다. 더 큰 문제는 HTML로 페이지를 읽는 경우 태그 스크립트 는 ‘기본적으로’CDATA로 간주되며 이러한 JavaScript는 실행되지 않습니다. 따라서 XHTML 및 HTML 구문 분석기를 사용하여 동일한 페이지를 확인하려면 스크립트 태그를 XHTML의 CDATA 요소로 묶어야하지만 HTML로 묶지 않아야합니다.

이 트릭은 CDATA 요소의 시작을 JavaScript 주석으로 표시합니다. HTML에서 JavaScript 파서는 CDATA 태그를 무시합니다 (주석입니다). XHTML에서 XML 파서 (JavaScript 전에 실행)는이를 감지하고 CDATA 끝까지 CDATA로 나머지를 처리합니다.


답변

X (HT) ML입니다. <and와 같은 기호를 사용할 때>예를 들어, 두 정수를 비교하기 위해 JavaScript 내에서 하는 경우 XML처럼 구문 분석해야하므로 태그의 시작 또는 끝으로 표시됩니다.

CDATA는 다음 줄을 의미합니다 (모든 ]]>것은 XML이 아니므로 그렇게 해석해서는 안됩니다).


답변

마십시오 하지 HTML4에서 CDATA를 사용하지만 당신은 해야 XHTML에서 CDATA를 사용 합니다 당신이 <와> 같은 이스케이프 문자가있는 경우 XML에서 CDATA를 사용합니다.


답변

외부 참조가 아닌 페이지에 JavaScript가 포함 된 경우 XHTML 유효성 검사가 올바르게 작동합니다.

XHTML을 사용하려면 페이지가 XML 마크 업 요구 사항을 엄격하게 준수해야합니다. JavaScript에는 특수한 의미의 문자가 포함될 수 있으므로 유효성 검사에서 형식이 잘못된 것으로 표시되지 않도록 CDATA로 랩핑해야합니다.

웹에서 HTML 페이지를 사용하면 태그 사이에 필요한 JavaScript 만 포함 할 수 있습니다. 웹 페이지에서 HTML의 유효성을 검사 할 때 JavaScript 내용은 CDATA (문자 데이터)로 간주되므로 유효성 검사기에서 무시됩니다. 웹 페이지 설정에서 최신 XHTML 표준을 따르는 경우에도 마찬가지입니다. XHTML을 사용하면 스크립트 태그 사이의 코드가 PCDATA (구문 분석 된 문자 데이터)로 간주되므로 유효성 검사기가 처리합니다.

이 때문에 웹 페이지를 ‘깨뜨리지 않고'(적어도 유효성 검사기가 관련되는 한) 페이지의 스크립트 태그 사이에 JavaScript를 포함시킬 수는 없습니다.

CDATA에 대한 자세한 내용은 여기에서 , XHTML 에 대한 자세한 내용은 여기 에서 확인할 수 있습니다 .