HTML5 在解析标签<script>
时可能会出现以下三种数据状态:
其中处于 escaped state 与 double escaped state 的状态会被当做 js 语句执行。 具体到标签中:
<script type = "text/javascript">
<!-- script data escaped dash dash state
this is script data escaped state
<script> this is script data double escaped state
</script>
this is script data escaped state
-->
< /script>
HTML5 解析器在<script></script>
标签中解析到<!--
时候,会进入到 dash dash escaped state,哪怕是<!--
出现在 js 的字符串中,如下
<script>
if(console.log("<!--var a;<script>")</script>/)
alert("script data state");
else
alert("script data state too");
-->
</script>
上述代码的运行结果为:
控制台输出<!--var a;<script>
弹窗弹出 script data state too
不会出现 js 错误信息。
说明:
<!--
触发的状态会持续到遇到>为止,上面的代码如果不加<script>
,那么<!--
就会因为遇到</script>
中的>而结束。
如果不加-->
那么 js 会运行到 HTML5 文档的最末尾 EOF 结束,从而导致解析错误。