首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在注释中添加</script>会破坏解析器?

为什么在注释中添加</script>会破坏解析器?
EN

Stack Overflow用户
提问于 2015-09-30 07:25:02
回答 4查看 3.8K关注 0票数 73

为什么在注释中添加</script>会破坏解析器?这是一个bug,还是我在文档中忽略了什么?

我已经在Chrome,Firefox,Opera,Internet和Explorer上测试过了,它们都产生了相同的结果。

单行注释:

代码语言:javascript
运行
AI代码解释
复制
function Foo(){
  // </script>
  alert("bar");
};

Foo();

多行注释:

代码语言:javascript
运行
AI代码解释
复制
function Foo(){
  /*
      </script>
  */
  alert("bar");
};

Foo();

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-30 07:31:21

这是因为W3C定义的超文本标记语言解析器与JavaScript解析器完全分离。在<script>标记之后,它查找结束的</script>,而不管它是在注释还是字符串中,因为它将JS代码视为普通文本。

票数 102
EN

Stack Overflow用户

发布于 2015-09-30 07:33:32

超文本标记语言解析器不解析JavaScript。它只解析由<tag></tag>标记表示的HTML元素。它不知道某些东西是JavaScript注释。当它看到</script>结束标记时,它认为脚本元素正在被关闭。无论字符串</script>出现在什么上下文中,都会发生相同的情况;例如,console.log("</script>")将产生相同的行为。

这是一个很好的理由,不将脚本嵌入到HTML中,而是将它们包含在外部。

票数 33
EN

Stack Overflow用户

发布于 2015-09-30 08:43:11

您可以对嵌入式JavaScript代码进行超文本标记语言转义

代码语言:javascript
运行
AI代码解释
复制
<script type="text/javascript">
<!--

function Foo(){
 // </script>
  alert("bar");
};

Foo();

//-->
</script>

因此,整个JavaScript代码被超文本标记语言解析器视为超文本标记语言注释,而超文本标记语言注释行被JavaScript解释器忽略。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32860237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档