如何在JavaScript字符串中插入"</script>"?

27

我一直在尝试一些Javascript技巧,结果遇到了一个荒谬的问题:我不能将<script>作为Javascript字符串的子串使用!以下是一个示例:

<html>
    <head>
        <script>
            alert("<script></script>");
        </script>
    </head>
</html>

本来应该打印出<script></script>,但是实际上我得到的是:

");

在页面上打印出来,以HTML格式呈现。

问题:我如何在Javascript中使用<script>后跟</script>子字符串,以及为什么它会产生这样的效果?

这是JSFiddle的演示。

3个回答

40
你遇到的问题是 </script>。HTML 解析器无法识别 JavaScript 字符串或嵌套的 <script> 标签,因此它将其解释为初始 <script> 的结束标记。也就是说,文档的这部分被解析为:
<script>                (open tag)
    alert("<script>     (text node - contents of the script)
</script>               (close tag)
");                     (text node - plain text)

第二个</script>被忽略了,因为没有其他的<script>标签需要它来关闭。

为了解决这个问题,可以将</script分开,这样HTML解析器就不会识别它。例如:

alert("<script><\/script>");

或者:

alert("<script><" + "/script>");

或者将代码放在外部的Javascript文件中。这个问题只会出现在内联脚本中。


3

我认为问题出在反斜杠\上。由于我是Javascript的新手,无法给出具体解释,但是这段代码应该可以正常工作:

alert("<script><\/script>");

使用Java知识想出了这个方案...哈哈因为在许多语言中,\是转义键。


-1

Alert(\<script>\</script>\)


请阅读如何撰写好的答案?。虽然这个代码块可能回答了OP的问题,但如果您解释一下这段代码与问题中的代码有何不同,您做了哪些更改,为什么要更改以及为什么这样解决问题而不会引入其他问题,那么这个答案将会更加有用。 - Saeed Zhiany

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接