为什么此代码会中断:
<script>
var test = "<!-- <script ";
</script>
<h1>
If you can see this it means the page didn't break
</h1>
&#13;
https://jsfiddle.net/y3w7ugaw/
这并不是
<script>
var test = "<!-- <script";
</script>
<h1>
If you can see this it means the page didn't break
</h1>
&#13;
https://jsfiddle.net/mL1xxygo/
我不应该因为test
var是一个字符串
答案 0 :(得分:2)
好问题。这两个例子的不同之处在于,第一个例子在<script
和后面的两个双引号之间有一个空格而第二个没有。这两个示例都有字符序列<!--
,用于在javascript字符串中的HTML源代码中引入comments。
第一个示例没有显示标题,可以通过
重新显示标题<!--
个字符,或<script
之后的空格。评论中提到的问题是HTML虽然阅读HTML parsing spec并不能使原因特别明显,但HTML无效。
javascript 解决方案是为了解析使用反斜杠,混淆解析器的字符,即使该字符通常不需要转义。 JavaScript会在普通字符之前忽略反斜杠,而解析器则不会。
因此
var test = "<\!-- <script ";
或
var test = "<\!-- <script";
两者都成功创建了一个包含HTML开始注释序列的字符串,而不会混淆解析器。