When is a CDATA section necessary within a script tag?

后端 未结 15 2308
时光说笑
时光说笑 2020-11-21 22:37

Are CDATA tags ever necessary in script tags and if so when?

In other words, when and where is this:



        
15条回答
  •  面向向阳花
    2020-11-21 23:12

    HTML

    An HTML parser will treat everything between as part of the script. Some implementations don't even need a correct closing tag; they stop script interpretation at "", which is correct according to the specs.

    Update In HTML5, and with current browsers, that is not the case anymore.

    So, in HTML, this is not possible:

    ';
    alert(x)
    
    

    A CDATA section has no effect at all. That's why you need to write

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

    or similar.

    This also applies to XHTML files served as text/html. (Since IE does not support XML content types, this is mostly true.)

    XML

    In XML, different rules apply. Note that (non IE) browsers only use an XML parser if the XHMTL document is served with an XML content type.

    To the XML parser, a script tag is no better than any other tag. Particularly, a script node may contain non-text child nodes, triggered by "<"; and a "&" sign denotes a character entity.

    So, in XHTML, this is not possible:

    
    

    To work around this, you can wrap the whole script in a CDATA section. This tells the parser: 'In this section, don't treat "<" and "&" as control characters.' To prevent the JavaScript engine from interpreting the "" and "]]>" marks, you can wrap them in comments.

    If your script does not contain any "<" or "&", you don't need a CDATA section anyway.

提交回复
热议问题