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

Posted

技术标签:

【中文标题】脚本标签内的 HTML 注释是最佳实践吗? [关闭]【英文标题】:Are HTML comments inside script tags a best practice? [closed] 【发布时间】:2010-10-22 23:16:09 【问题描述】:

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

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

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

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

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

【问题讨论】:

Does it still make sense to use html comments on blocks of JavaScript? 的可能重复项 【参考方案1】:

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

Matt Kruse 在他的 JavaScript 工具箱 网站上稍微more detailed explanation 解释了为什么特别 在脚本块中使用 HTML cmets。

引自该页面:


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

在 javascript 的早期(1995 年),一些浏览器(如 Netscape 1.0)不支持或不了解 script 标签。因此,当 javascript 首次发布时,需要一种技术来隐藏旧浏览器中的代码,这样它们就不会在页面中将其显示为文本。 “hack”是在脚本块中使用 HTML cmets 来隐藏代码。

在脚本中使用 HTML 注释是不好的

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

当今常用的浏览器都不知道

在 XHTML 文档中,源代码实际上对所有浏览器都隐藏并且呈现为无用 -- 不允许在 HTML cmets 中使用,因此脚本中的任何减量操作都是无效的

【讨论】:

+1。我知道有人在我的 comp.lang.javascript 日子里有很多关于这个主题的信息,当你的答案出现时,我正在阅读新闻组档案,引用 Matt 的话。 在 XHTML 中,您可以使用 CDATA 代替 HTML 注释: 我应该补充一点,这个“黑客”在 Internet Explorer 9 中产生了一个错误(客户抱怨页面无法正常工作,这就是原因)【参考方案2】:

我已经停止这样做了。在某些时候,你只需要放开你的 NCSA 马赛克。

【讨论】:

换句话说,没有提供关于为什么 OP 应该停止这样做的理由。您是在建议他应该停止这样做,因为您这样做了,这不足以成为 IMO 的答案。 @LawrenceAiello:“最佳实践”这个短语让你想到的是“事实”而不是“意见”吗? 这就是整个帖子的最终错误。它应该已经关闭,因为它是一个讨论问题。 也许当这是 六年前发布的时,这可以作为答案,但是按照今天的网站标准,它不是。 这个答案正在Meta SO讨论【参考方案3】:

根据 W3C 建议,对 USER AGENTS 隐藏脚本数据主要有用。

引自W3c page:

在 JavaScript 中注释脚本 JavaScript 引擎允许字符串 "&lt;!--" 出现在 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 则完全不同。【参考方案4】:

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

在 XHTML 中,它们是有害的。

不久前我写了一些关于the history of it 的文章。

【讨论】:

【参考方案5】:

不久前停止使用它。另外,根据Douglas Crockford,您可以从脚本标签中drop the type attribute,因为大多数浏览器中唯一可用的脚本语言是JavaScript。

【讨论】:

大多数浏览器仍然可以工作,但它违反了 HTML 规范,所以我不建议这样做。 你永远不知道IE什么时候会把VB脚本作为默认类型..【参考方案6】:

我建议使用 CDATA 部分,如 this question 中所述。

【讨论】:

另见***.com/questions/66837/…【参考方案7】:

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

关于您的担忧:当今大多数浏览器都是 JavaScript 安全的。然而,有时人们可能会编写简单的解析器来直接获取 HTML - 我必须说,安全引用对这些客户非常有帮助。此外,一些非 JS 客户端(例如老 Lynx)也会从中受益。

【讨论】:

【参考方案8】:

如果您在脚本标签之间不包含文字文本——也就是说,如果您从 src 文件加载脚本,您可以忘记 cmets。

【讨论】:

【参考方案9】:

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

【讨论】:

@Yvette 在我发布答案六年后,您发布该评论的动机是什么? @Yvette 没有冒犯,我只是好奇。当然你是对的;现在我会把它作为评论发布。【参考方案10】:

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

【讨论】:

以上是关于脚本标签内的 HTML 注释是最佳实践吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

多行 CSS 注释是不是有最佳实践? [关闭]

模板标签内的Django字符串连接最佳实践

组件范围内的 CSS 选择器最佳实践 [关闭]

样式化 HTML 电子邮件的最佳实践 [关闭]

JSON 验证是最佳实践吗? [关闭]

shell脚本的设计模式或最佳实践[关闭]