为什么在注释中添加</ script>会破坏parsing器?
为什么在注释中添加</script>
破坏parsing器? 这是一个错误还是在我忽略的文件中有东西?
我已经在Chrome,Firefox,Opera,Internet Explorer中testing过了,它们都产生了相同的结果。
单行评论:
function Foo(){ // </script> alert("bar"); }; Foo();
多行评论:
function Foo(){ /* </script> */ alert("bar"); }; Foo();
发生这种情况是因为W3C定义的HTMLparsing器完全与JavaScriptparsing器分离。 在<script>
标签之后,它会查找结束的</script>
,而不pipe它在注释或string中,因为它将JS代码视为普通文本。
HTMLparsing器不parsingJavaScript。 它只parsingHTML元素,由<tag>
和</tag>
标签</tag>
。 它不知道有什么是JavaScript评论。 当它看到</script>
结束标记时,它假定脚本元素正在closures。 在string</script>
出现的任何上下文中都会发生同样的情况。 例如, console.log("</script>")
会产生相同的行为。
这不是在HTML中embedded脚本的一个很好的理由,而是在外部包含它们。
您可以使用HTML转义embedded式JavaScript代码
<script type="text/javascript"> <!-- function Foo(){ // </script> alert("bar"); }; Foo(); //--> </script>
因此,整个JavaScript代码被HTMLparsing器视为HTML注释,HTML解释器忽略HTML注释行。
一个更简单的解决方法是embedded评论:
function Foo(){ //<!-- </script> --> alert("bar"); }; Foo();
它将评论线的JavaScript和HTML。