Chrome中非常奇怪的故障 - 解析字符串的内容!

Nat*_*man 3 html javascript google-chrome html-parsing

好的 - 这是我在一段时间内看到的最愚蠢的故障:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type='text/javascript'>

var data = "</script>";

</script>
</head>
<body>

This should break!

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这会导致语法错误,因为JavaScript解析器实际上是在读取字符串的内容.多么愚蠢!

我怎样才能输入</script>我的代码.有什么办法吗?

这种行为是否有正当理由?

dec*_*eze 5

在X(HT)ML内(当实际处理时),脚本需要作为CDATA进行转义,正是出于这个原因.http://www.w3.org/TR/xhtml1/diffs.html#h-4.8

在XHTML中,脚本和样式元素被声明为具有#PCDATA内容.其结果是,<&将被视为标记的开始,以及诸如实体&lt;&amp;将被识别为XML处理器实体引用<&分别.在CDATA标记的部分中包装脚本或样式元素的内容可以避免扩展这些实体.

<script type="text/javascript">
<![CDATA[
  ... unescaped script content ...
]]>
</script>
Run Code Online (Sandbox Code Playgroud)

如果您的XHTML文档仅作为text/html提供并被视为标记汤,则不适用,您只需要"转义"字符串即可'</scr' + 'ipt>'.