为什么在注释中添加</script>
会破坏解析器?这是一个bug,还是我在文档中忽略了什么?
我已经在Chrome,Firefox,Opera,Internet和Explorer上测试过了,它们都产生了相同的结果。
单行注释:
function Foo(){
// </script>
alert("bar");
};
Foo();
多行注释:
function Foo(){
/*
</script>
*/
alert("bar");
};
Foo();
发布于 2015-09-30 07:31:21
这是因为W3C定义的超文本标记语言解析器与JavaScript解析器完全分离。在<script>
标记之后,它查找结束的</script>
,而不管它是在注释还是字符串中,因为它将JS代码视为普通文本。
发布于 2015-09-30 07:33:32
超文本标记语言解析器不解析JavaScript。它只解析由<tag>
和</tag>
标记表示的HTML元素。它不知道某些东西是JavaScript注释。当它看到</script>
结束标记时,它认为脚本元素正在被关闭。无论字符串</script>
出现在什么上下文中,都会发生相同的情况;例如,console.log("</script>")
将产生相同的行为。
这是一个很好的理由,不将脚本嵌入到HTML中,而是将它们包含在外部。
发布于 2015-09-30 08:43:11
您可以对嵌入式JavaScript代码进行超文本标记语言转义
<script type="text/javascript">
<!--
function Foo(){
// </script>
alert("bar");
};
Foo();
//-->
</script>
因此,整个JavaScript代码被超文本标记语言解析器视为超文本标记语言注释,而超文本标记语言注释行被JavaScript解释器忽略。
https://stackoverflow.com/questions/32860237
复制相似问题