3

这 :

<script type="text/javascript">
var a = new Array("</script>");
alert(a);
</script>

...没有按预期工作(至少对我来说)。该字符串"</script>"被解释为脚本的结尾,即使它在引号中。请参阅这些 jsfiddles :

http://jsfiddle.net/RYbTS/

http://jsfiddle.net/PB73z/

第一个以正常方式声明数组的第一个元素,而第二个以紧凑形式声明它。在这两种情况下,浏览器(Chrome、FF、IE)都会停止脚本"</script>"并且永远不会收到警报。

无论是使用引号还是双引号,它的行为方式都相同。

是预期的吗?有解决方法吗?

编辑:谢谢大家,我会避开反斜杠。抱歉我不能接受大家的回答,我接受了第一个,但是谢谢大家。

Juhana 提供的链接解释了这种行为:

在将元素中的文本节点传递给 JS 引擎之前解析所有 HTML,</script>在 JS 字符串文字内没有特殊处理

4

3 回答 3

3

你可以逃避这个/角色:

<script type="text/javascript">
var a = new Array("<\/script>");
alert(a);
</script>

这是一个更新的小提琴

于 2013-10-07T10:01:48.257 回答
2

转义序列:

var a = new Array("<\/script>");

或拆分它:

var a = new Array("</scr" + "ipt>");

这就是 json 编码转义/. 通常没有必要逃避它,但这是(我认为)你遇到问题的唯一情况。当然,转义序列会更准确,</script>但这似乎有点出乎意料。

于 2013-10-07T10:02:01.967 回答
1

使用如下:

<script type="text/javascript">

var a = new Array("<\/script\>");
alert('ok');

</script>

在这里小提琴:

http://jsfiddle.net/GUc2x/

于 2013-10-07T10:06:46.007 回答