Legacy/Web
[JavaScript] CDATA 선언문
Foo
2015. 7. 11. 14:43
728x90
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"> <head> <title> new document </title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <script type="text/javascript"> //<![CDATA[ var num=100; var str="자바스크립트"; document.write(typeof num, "<br />"); document.write(typeof str, "<br />"); //]]> </script> </head> <body> </body> </html> | cs |
위의 예제에 사용된 //<![CDATA[ //]]>는 무엇일까??
이것을 CDATA 선언문이라고 한다. 이 CDATA 선언문은 왜 작성하는 것일까??
이를 이해하려면 <head>태그에 올 수 있는 데이터가 어떤 것들이 있는지 생각해보자.
<head>태그에 올 수 있는 데이터는 <title>이나 <meta> 또는 <script> 같은 HTML 문서의 '본문(body)'에 적혀서 사용자 눈에 보이는 데이터들이 아니다.
그런데 이 <head>태그 안에 <br />태그가 존재하고 있다. 이것은 HTML 문서의 유효성(Validate)를 검사하는 파서(Parser)의 입장에서는 이것이 잘못되었다고
간주하여 사용자에게 경고 메시지를 띄워줄 수 있다. 경우에 따라 이것을 단순 경고가 아닌 오류로 처리하여 없는 라인으로 처리해버리는 경우
역시 발생할 수도 있기 때문에 위와 같은 경우 반드시 CDATA 선언을 해주어야한다.
CDATA 선언을 하면 왜 경고를 띄우지 않을까? CDATA 선언이 경고를 무시하도록 하는 것이 아니라
CDATA 선언을 하면 그 선언 안에 있는 내용들 중 '태그'가 있어도 그것을 '태그'로 작성한 것이 아니라 '문자열'의 일부로 작성한 것이라는 것을 알려주는 것이다.
때문에 JavaScript 안에 태그가 들어갈 경우 반드시 CDATA 선언 안에 넣어줘야한다.