Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用HTML注释封装JavaScript代码块吗?_Javascript - Fatal编程技术网

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

我应该使用HTML注释封装JavaScript代码块吗?,javascript,Javascript,几年前,我被教导嵌入HTML中的JavaScript代码块应始终封装在HTML注释中,如下所示: <script type="text/javascript"> <!-- var hello = "world"; --> </script> 我被告知要这么做,但我从未完全弄明白原因。使用HTML注释似乎有点不妥,因此现在我开始在脚本块中编写JavaScript代码,而不使用HTML注释: <script type="text/javascript"

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

<script type="text/javascript">
<!--
var hello = "world";
-->
</script>

我被告知要这么做,但我从未完全弄明白原因。使用HTML注释似乎有点不妥,因此现在我开始在脚本块中编写JavaScript代码,而不使用HTML注释:

<script type="text/javascript">
var hello = "world";
</script>

var hello=“world”;
所以我的问题是:我应该使用HTML注释来封装JavaScript代码块吗?只写没有注释的脚本安全吗?我的意思是,当我忽略评论标签时,我是不是冒着什么风险?

直接从

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

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

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

用JavaScript注释脚本 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>


此外,如果你真的想了解这一切意味着什么,请阅读本文。它很长,但值得一读

HTML注释的目的是对不理解
元素的古代浏览器隐藏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注释中以隐藏在“旧”浏览器中的引用时

在InternetExplorer3中,微软引入了他们自己的JavaScript等价物,他们称之为JScript。从那时起,所有浏览器都至少识别了脚本标签,而更现代的浏览器(Netscape 2+、IE3+等)不再需要HTML注释。因此,一旦所有访问者都升级到使用Netscape 2、Internet Explorer 3或比这两种浏览器都更新的浏览器,脚本注释就变成了冗余代码


你能再详细说明一下:这种风险有多大?你知道一些特定的浏览器会这样做吗?支持HTML的半最新版本的浏览器不会呈现
元素内容。这应该只会困扰Amigas上的Mosaic用户。也许还有一些用户在15年内没有升级过Lynx。@jsalonen,请参阅我的更新和@Stan和@Joey的评论。谢谢!你在这里说得很好。注意,HTML4.01规范是1999年编写的。因此,除非我真的想为传统浏览器设计,否则我似乎不应该费心使用注释标记。我承认JavaScript代码中偶尔需要转义HTML实体,对于这个任务,当然需要转义机制。但是,转义JavaScript超出了我的问题范围。谢谢!这也是我的直觉。我没有遇到过一个客户端在使用无注释JavaScript块的页面时遇到问题。您是否知道在哪些特定浏览器中会发生这种不必要的行为?因此,这确实是一个古老的要求。案件结案。谢谢对于阅读此答案的任何人,请参阅Marko的优秀答案,并提供有关此问题的更多详细信息。