脚本标记中的HTML注释是最佳实践吗?[关闭]


97

在我必须使用的嵌入式JavaScript中,以下做法相当普遍:

<script type="text/javascript">
   <!--
       // Code goes here
   //-->
</script>

我知道关键是要防止与JavaScript不兼容的浏览器呈现源代码,但这是否仍是当今的最佳做法?当今使用的绝大多数浏览器都可以解释JavaScript。即使是现代移动设备也通常不会遇到麻烦。

至于“为什么不呢?” 问题:我最近不得不花费几个小时来调试一个问题,该问题是有人在深埋在某些页面中的脚本标签末尾的“->”前面没有了“ //”,这导致了神秘的JavaScript错误。

你是做什么?这仍然被认为是“最佳实践”吗?


Answers:


118

重要的是,如今,特定的浏览器是否支持JavaScript是无关紧要的(显然绝大多数都支持)-这是不相关的,因为几乎所有的浏览器理解脚本块,这意味着即使他们不知道,他们也知道忽略JavaScript。解释它。

马特·克鲁斯(Matt Kruse)在其JavaScript工具箱网站上给出了更为详细的解释,说明了为什么在脚本块中特别使用HTML注释。

从该页面引用:


不要在脚本块中使用HTML注释

在javascript(1995年)的古代,一些浏览器(如Netscape 1.0)对script标签没有任何支持或了解。因此,当javascript首次发布时,需要一种技术来将代码隐藏在较旧的浏览器中,以免它们在页面中显示为文本。“黑客”是在脚本块中使用HTML注释来隐藏代码。

在脚本中使用HTML注释是错误的

// DON'T do this! Code is just representative on how things were done
<script language="javascript">
<!--
   // code here
//-->
</script>

今天,没有任何常用的浏览器会忽略<script>标签,因此不再需要隐藏javascript源。实际上,由于以下原因,它可以被认为是有害的:

  • 在XHTML文档中,实际上该源对于所有浏览器都是隐藏的,并使其无用。
  • -不允许在HTML注释中使用,因此脚本中的任何减量操作均无效

1
+1。我知道在comp.lang.javascript的日子里,有人对这个主题有很多了解,当您的答案出现时,我会仔细阅读新闻组档案,并引用Matt的话。
格兰特·瓦格纳

1
在XHTML中,可以使用CDATA代替HTML注释:<script ...> // <![CDATA [... //]]> </ script>
Concrete Gannet 2013年

我应该补充一点,这个“ hack”会在Internet Explorer 9中产生错误(客户端抱怨页面无法正常工作,这就是原因)
lordscales91,18年

24

我已经停止了 在某些时候,您只需要放开NCSA Mosaic。


7
换句话说,没有提供理由为,为什么在OP应该停止这样做。您建议他应该停止这样做,因为您这样做了,这不足以成为IMO的答案。
劳伦斯·艾洛

1
@LawrenceAiello:“最佳实践”这个短语会让您想到“事实”而不是“观点”吗?
2015年

5
这就是整个职位的最终缺点。应该关闭它,因为这是一个讨论问题。
劳伦斯·艾洛

1
也许在六年前发布此内容时,它可以作为答案,但是按照网站的今天的标准,它不是。
j08691 2015年

1
这个答案正在于讨论元SO
CubeJockey

10

根据W3C建议书,对USER AGENTS隐藏脚本数据非常有用。

W3c页面引用:

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>

2
如果正在使用HTML4.x。与XHTML完全不同。
Quentin

8

不,这是首次引入脚本元素时所使用的解决方法的遗留问题。今天,没有浏览器无法理解脚本元素(即使它理解为“由于脚本已关闭或不受支持而应忽略的脚本”)。

在XHTML中,它们是有害的。

我写了一些关于它的历史的东西。


3

不久后停止使用此功能。另外,根据Douglas Crockford的说法,由于大多数浏览器中唯一可用的脚本语言是JavaScript ,因此您可以从脚本标签中删除type属性


1
大多数浏览器仍然可以运行,尽管它违反了HTML规范,所以我不建议这样做。
Quentin

4
您永远不会知道IE何时将VB脚本作为默认类型
弗朗西斯

1

如果您手动输入,建议您始终使用外部js文件,这将有很大帮助。

关于您的关注:当今大多数浏览器都是JavaScript安全的。但是,有时人们可能会编写简单的解析器以直接获取HTML-我必须说,安全引号对这些客户端确实很有帮助。同样,一些像旧Lynx这样的非JS客户也将从中受益。


1

如果在脚本标记之间不包含文字文本,也就是说,如果您从src文件加载脚本,则可以忽略注释。



0

我很久以前就停止这样做了。在这个时代,您真的不需要它。


@Yvette我发表答案六年后,您发表此评论的动机是什么?
John Topley

@Yvette没有冒犯,我只是好奇。当然,您是对的;如今,我会将其发布为评论。
约翰·托普利

-1

我没有这样做,但是前几天我去w3c验证了我受密码保护的站点。所以我不得不使用他们的直接输入法。它抱怨我的JavaScript,所以我把评论放回去一切都很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.