【问题标题】:The string "</script>" in an array is interpreted, is there a workaround? [duplicate]数组中的字符串“</script>”被解释,有解决方法吗? [复制]
【发布时间】:2013-10-07 10:00:07
【问题描述】:

这个:

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

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

http://jsfiddle.net/RYbTS/

http://jsfiddle.net/PB73z/

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

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

这是预期的吗?有解决办法吗?

编辑:谢谢大家,我会转义反斜杠。抱歉没能接受大家的回答,我接受了第一个,不过谢谢大家。

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

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以转义 / 字符:

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

    这是updated fiddle。

    【讨论】:

      【解决方案2】:

      转义序列:

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

      或拆分:

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

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

      【讨论】:

        【解决方案3】:

        如下使用:

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

        在这里摆弄:

        http://jsfiddle.net/GUc2x/

        【讨论】:

          猜你喜欢
          • 2013-02-17
          • 2011-03-02
          • 2021-12-11
          • 2020-10-24
          • 1970-01-01
          • 2015-11-07
          • 2013-10-13
          • 1970-01-01
          • 2019-09-19
          相关资源
          最近更新 更多