【发布时间】:2017-07-01 11:08:36
【问题描述】:
Javascript 中允许使用 HTML cmets,适用于不知道 <script> 标记的旧版浏览器。
参考:Are HTML comments inside script tags a best practice?
所以,JS 解析器允许 <!-- 在脚本的开头,在解析时将被忽略。并且,--> 应该以// 为前缀,以便 JS 引擎也忽略它们。
参考 W3C:https://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.3.2
在玩这个的时候,我看到了这个奇怪的行为。
<script>
<!--
alert(1);
-->
</script>
在这里,请注意--> 没有以// 为前缀,这应该会由 Chrome JS 引擎引发错误。但是,Chrome JS 引擎将它们视为 cmets,并忽略解析。为什么? (第一季度)
还有,另一种行为:
<script>
alert(1);
-->''>{][}
</script>
这个 sn-p 将执行警报。在这里,注意--> 的位置。这个特定的字符序列使解析器ignore 跟随它的所有其他不正确的值。
我的意思是,代替-->,使用任何其他字符/序列,它会抛出错误。
那么,这里发生了什么? --> 如何使这个 sn-p 有效? (第二季度)
注意:--> 序列应以新行作为前缀。也就是说,
<script>
<!--
alert(1); -->''>{][}
</script>
会抛出一个错误。再说一遍,为什么? (第三季度)
【问题讨论】:
标签: javascript google-chrome comments javascript-engine