脚本标签内的 HTML 注释是最佳实践吗?

IT技术 javascript html
2021-01-19 00:36:08

以下做法在我必须使用的内联 JavaScript 中相当普遍:

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

我知道重点是防止与 JavaScript 不兼容的浏览器呈现源代码,但这在今天仍然是最佳实践吗?今天使用的绝大多数浏览器都可以解释 JavaScript;即使是现代移动设备通常也不会遇到问题。

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

你做什么工作?这仍被视为“最佳实践”吗?

6个回答

重要的是,现在,一个特定的浏览器是否支持 JavaScript 已经无关紧要(显然大多数人支持)——这无关紧要,因为几乎所有人都理解脚本块,这意味着他们知道忽略 JavaScript,即使他们不能解释它。

Matt Kruse在他的JavaScript Toolbox站点给出了更详细的解释,说明为什么特别不在脚本块中使用 HTML 注释。

引自该页面:


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

在 JavaScript (1995) 的古老时代,一些浏览器(如 Netscape 1.0)不支持或不了解脚本标记。因此,当 JavaScript 首次发布时,需要一种技术来隐藏旧浏览器中的代码,这样它们就不会在页面中将其显示为文本。“hack”是在脚本块中使用 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 注释中使用,因此脚本中的任何递减操作都是无效的
在 XHTML 中,您可以使用 CDATA 代替 HTML 注释:<script ...>//<![CDATA[ ... //]]></script>
2021-03-26 00:36:08
我应该补充一点,这个“hack”在 Internet Explorer 9 中产生了一个错误(一个客户抱怨一个页面不能正常工作,这就是原因)
2021-04-03 00:36:08
+1。我知道有人在我 comp.lang.javascript 的日子里有很多关于这个主题的信息,当你的答案出现时,我正在阅读新闻组档案,引用马特的话。
2021-04-11 00:36:08

我已经停止这样做了。在某些时候,您只需要放弃您的 NCSA Mosaic。

换句话说,没有提供关于为什么OP 应该停止这样做的理由。您建议他应该停止这样做,因为您这样做了,这不足以成为 IMO 的答案。
2021-03-12 00:36:08
也许当六年前发布时,这可以作为答案,但是按照今天的网站标准,它不是。
2021-03-27 00:36:08
整篇文章的最终错误就在于此。它应该关闭,因为这是一个讨论问题。
2021-03-28 00:36:08
这个答案正在Meta SO上讨论
2021-04-03 00:36:08
@LawrenceAiello:“最佳实践”这个词会让你想到“事实”而不是“意见”吗?
2021-04-07 00:36:08

根据W3C 建议,对用户代理隐藏脚本数据主要是有用的。

引自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>
如果正在使用 HTML 4.x。XHTML 则完全不同。
2021-04-08 00:36:08

不,这是首次引入脚本元素时使用的解决方法的后遗症。今天没有浏览器无法理解脚本元素(即使它理解为“应​​该被忽略的脚本,因为脚本被关闭或不受支持”)。

在 XHTML 中,它们是有害的。

不久前我写了一些关于它的历史的东西

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

大多数浏览器仍然可以工作,但它违反了 HTML 规范,所以我不建议这样做。
2021-03-29 00:36:08
你永远不知道 IE 什么时候会采用 VB 脚本作为默认类型..
2021-04-07 00:36:08