인가 CDATA의 태그 그래서 스크립트 태그 그리고 만약 적 필요?
다른 말로하면, 언제, 어디서?
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
이것보다 선호 :
<script type="text/javascript">
...code...
</script>
인가 CDATA의 태그 그래서 스크립트 태그 그리고 만약 적 필요?
다른 말로하면, 언제, 어디서?
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
이것보다 선호 :
<script type="text/javascript">
...code...
</script>
답변:
당신이 XML로 구문 분석에 문서를해야 할 경우 CDATA 섹션이 필요합니다 (예를 들어, XHTML은 페이지가 XML로 해석됩니다 경우) 당신은 문자 그대로 쓸 수 있기를 원하는 i<10
및 a && b
대신 i<10
하고a && b
, XHTML은 구문 분석 된 문자 데이터로 자바 스크립트 코드를 파싱로 기본적으로 문자 데이터와 반대입니다. 이것은 외부 소스 파일에 저장된 스크립트의 문제는 아니지만 XHTML의 인라인 JavaScript의 경우 아마도 경우 CDATA 섹션을 사용하고 싶을 .
많은 XHTML 페이지는 결코 XML로 파싱되도록 의도되지 않았으며,이 경우에는 문제가되지 않습니다.
주제에 대한 글을 잘 작성하려면 https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm을 참조 하십시오.
&
와 <
문자, 당신은 CDATA 섹션을 필요로하지 않는다; HTML과 XHTML 모두에서 잘 작동합니다. 모든 중요한 코드를 외부 스크립트에 넣고 인라인 스크립트를 사용하여 쉽게 달성 할 수 있습니다. 변수를 초기화합니다 ( 필요한 경우 문자열 리터럴에서 &
/ <
를 \x26
/ \x3C
로 이스케이프 처리 ).
브라우저가 마크 업을 XML로 취급하는 경우 :
<script>
<![CDATA[
...code...
]]>
</script>
브라우저가 마크 업을 HTML로 취급하는 경우 :
<script>
...code...
</script>
브라우저가 마크 업을 HTML로 취급하고 XHTML 1.0 마크 업 (예 :)을 검증하려는 경우.
<script>
//<![CDATA[
...code...
//]]>
</script>
/* ... */
그렇지 않으면 줄 바꿈을 제거하면 코드가 깨질 것입니다.
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에서는 다른 규칙이 적용됩니다. XHMTL 문서가 XML 컨텐츠 유형으로 제공되는 경우 (비 IE) 브라우저는 XML 구문 분석기 만 사용합니다.
XML 파서에서 script
태그는 다른 태그보다 낫지 않습니다. 특히, 스크립트 노드는 " <
" 에 의해 트리거 된 텍스트가 아닌 자식 노드를 포함 할 수 있습니다 . 그리고 "&
"기호는 문자 엔터티를 나타냅니다.
따라서 XHTML에서는 불가능 합니다.
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
이 문제를 해결하기 위해 전체 스크립트를 CDATA
섹션으로 묶을 수 있습니다 . 파서에게 '이 섹션에서 " <
"와 " &
"를 제어 문자로 취급하지 마십시오 . " JavaScript 엔진이 " <![CDATA[
"및 " ]]>
"표시 를 해석하지 못하도록 주석으로 묶을 수 있습니다.
스크립트에 " <
"또는 " &
"가 포함되어 있지 않으면 CDATA
섹션이 필요하지 않습니다 .
</
내부 스크립트 태그 나쁘다입니다.
<script>var b = "<b>bold</b>";</script>
가 발생했습니다-유효성 검사에 실패했지만 답변을 읽고 <script>var b = "<b>bold<\/b>";</script>
수정 한 후 변경 하십시오.
기본적으로 XHTML과 HTML 인 문서를 작성할 수 있습니다. 문제는 XHTML 내에서 XML 파서가 스크립트 태그 의 &, <,> 문자를 해석하여 XML 파싱 오류를 발생 시킨다는 것 입니다. 따라서 엔티티를 사용하여 JavaScript를 작성할 수 있습니다. 예 :
if (a > b) alert('hello world');
그러나 이것은 비현실적입니다. 더 큰 문제는 HTML로 페이지를 읽는 경우 태그 스크립트 는 '기본적으로'CDATA로 간주되며 이러한 JavaScript는 실행되지 않습니다. 따라서 XHTML 및 HTML 구문 분석기를 사용하여 동일한 페이지를 확인하려면 스크립트 태그를 XHTML의 CDATA 요소로 묶어야하지만 HTML로 묶지 않아야합니다.
이 트릭은 CDATA 요소의 시작을 JavaScript 주석으로 표시합니다. HTML에서 JavaScript 파서는 CDATA 태그를 무시합니다 (주석입니다). XHTML에서 XML 파서 (JavaScript 전에 실행)는이를 감지하고 CDATA 끝까지 CDATA로 나머지를 처리합니다.
마십시오 하지 HTML4에서 CDATA를 사용하지만 당신은 해야 XHTML에서 CDATA를 사용 합니다 당신이 <와> 같은 이스케이프 문자가있는 경우 XML에서 CDATA를 사용합니다.
외부 참조가 아닌 페이지에 JavaScript가 포함 된 경우 XHTML 유효성 검사가 올바르게 작동합니다.
XHTML을 사용하려면 페이지가 XML 마크 업 요구 사항을 엄격하게 준수해야합니다. JavaScript에는 특수한 의미의 문자가 포함될 수 있으므로 유효성 검사에서 형식이 잘못된 것으로 표시되지 않도록 CDATA로 랩핑해야합니다.
웹에서 HTML 페이지를 사용하면 태그 사이에 필요한 JavaScript 만 포함 할 수 있습니다. 웹 페이지에서 HTML의 유효성을 검사 할 때 JavaScript 내용은 CDATA (문자 데이터)로 간주되므로 유효성 검사기에서 무시됩니다. 웹 페이지 설정에서 최신 XHTML 표준을 따르는 경우에도 마찬가지입니다. XHTML을 사용하면 스크립트 태그 사이의 코드가 PCDATA (구문 분석 된 문자 데이터)로 간주되므로 유효성 검사기가 처리합니다.
이 때문에 웹 페이지를 '깨뜨리지 않고'(적어도 유효성 검사기가 관련되는 한) 페이지의 스크립트 태그 사이에 JavaScript를 포함시킬 수는 없습니다.
CDATA에 대한 자세한 내용은 여기에서 , XHTML 에 대한 자세한 내용은 여기 에서 확인할 수 있습니다 .
CDATA는 내용이 XML이 아님을 나타냅니다.
Wikipedia에 대한 설명입니다.
XML / XHTML로 감사 하고 싶을 때 -Loren Segal .