我应该使用HTML注释来封装JavaScript代码块吗?

jsa*_*nen 12 javascript

几年前,我被告知嵌入HTML中的JavaScript代码块应始终封装在HTML注释中,如下所示:

<script type="text/javascript">
<!--
var hello = "world";
-->
</script>
Run Code Online (Sandbox Code Playgroud)

我被告知这样做,但我从来没有完全弄明白为什么.使用HTML注释似乎很麻烦,所以现在我开始使用在脚本块中编写我的JavaScript代码而没有HTML注释:

<script type="text/javascript">
var hello = "world";
</script>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:我应该使用HTML注释来封装JavaScript代码块吗?在没有评论的情况下编写脚本是否安全?我的意思是,当我遗漏评论标签时,我冒了一些风险?

Joe*_*oey 11

HTML注释旨在隐藏来自不了解<script>元素的古老浏览器的JavaScript ,而是在页面上呈现其内容.这可以追溯到90年代中期,iirc.现在,您可以放心地假设那个时代的浏览器不再出现在Web上并省略了注释.

关于它的一些不错的历史可以在这里找到:

关于浏览器不理解的HTML标记的一般规则是浏览器应该完全忽略标记并将页面内容视为不存在该标记.这意味着当Netscape 2首次引入JavaScript(或当时称为LiveScript)时,有必要在实际脚本周围放置HTML注释,以隐藏其他不了解脚本标记的浏览器的代码,以及因此会显示代码而不是运行它.

JavaScript语言专门用于接受HTML注释的开头作为脚本中的第一件事并忽略它,以便HTML注释可用于隐藏使用Netscape 1,Mozaic,Internet Explorer 1的人的脚本,Internet Explorer 2和其他类似的浏览器,其中任何人都不再使用它们.正是这些史前浏览器(用JavaScript术语)意味着当您在过时的JavaScript教程中看到将JavaScript包装在HTML注释中以便将其从"旧"浏览器中隐藏时.

在Internet Explorer 3中,Microsoft引入了他们自己的JavaScript,它们称之为JScript.从那时起,所有浏览器都至少识别出脚本标签和更现代的浏览器(Netscape 2 +,IE3 +等),不再需要HTML注释.所以当所有访问者都升级为使用Netscape 2,Internet Explorer 3或者比这两个中的任何一个更近的浏览器,脚本中的注释成为冗余代码.


Mar*_*rko 7

直接来源

18.3.2隐藏用户代理的脚本数据

不识别SCRIPT元素的用户代理可能会将该元素的内容呈现为文本.一些脚本引擎,包括语言JavaScript,VBScript和Tcl的脚本引擎,允许将脚本语句包含在SGML注释中.因此,无法识别SCRIPT元素的用户代理将忽略该注释,而智能脚本引擎将理解应该执行注释中的脚本.

该问题的另一个解决方案是将脚本保留在外部文档中,并使用src属性引用它们.

在JavaScript中注释脚本 JavaScript引擎允许字符串" <!--"出现在SCRIPT元素的开头,并忽略其他字符直到行尾.JavaScript将" //" 解释为开始延伸到当前行末尾的注释.这需要-->从JavaScript解析器隐藏字符串" ".

<SCRIPT type="text/javascript">
<!--  to hide script contents from old browsers
  function square(i) {
    document.write("The call passed ", i ," to the function.","<BR>")
    return i * i
  }
  document.write("The function returned ",square(5),".")
// end hiding contents from old browsers  -->
</SCRIPT>
Run Code Online (Sandbox Code Playgroud)

此外,如果您真的想了解所有这些意味着什么,请阅读这篇优秀的文章.它很冗长,但值得.