几年前,我被告知HTML中嵌入的JavaScript代码块应始终封装在HTML注释中,如下所示:
<script type="text/javascript">
<!--
var hello = "world";
-->
</script>
我被告知这样做,但我从来没有完全弄明白为什么。使用HTML注释似乎很麻烦,所以现在我已经开始在脚本块中编写我的JavaScript代码而没有HTML注释:
<script type="text/javascript">
var hello = "world";
</script>
所以我的问题是:我应该使用HTML注释来封装JavaScript代码块吗?在没有评论的情况下编写脚本是否安全?我的意思是,当我遗漏评论标签时,我冒了一些风险?
答案 0 :(得分:11)
HTML注释旨在隐藏来自不了解<script>
元素的古老浏览器的JavaScript,而是在页面上呈现其内容。这可以追溯到90年代中期,iirc。 现在您可以放心地假设那个时代的浏览器不再出现在网络上并且省略了评论。
可以找到一些不错的历史here:
关于浏览器无法理解的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或者比这两个中的任何一个更新的浏览器,脚本中的注释成为冗余代码。
答案 1 :(得分:6)
直接来自the source
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>
此外,如果您真的想了解所有这些意味着什么,请阅读此excellent article。它很长,但值得。