为啥我需要在 HTML 中注释 <script> 标签?

Posted

技术标签:

【中文标题】为啥我需要在 HTML 中注释 <script> 标签?【英文标题】:Why do I need to comment the <script> tag in HTML?为什么我需要在 HTML 中注释 <script> 标签? 【发布时间】:2011-05-24 05:22:43 【问题描述】:

我见过的大多数示例都有一个 html 页面中的脚本被括起来

<!--
...
-->

我试过不带注释标签来写它,似乎没有任何区别。为什么要使用评论标签,它的作用是什么?

【问题讨论】:

【参考方案1】:

真正不理解&lt;script&gt; 标签的旧浏览器可能会认为它是一个它不理解的格式化标签。通过在页面中内联呈现标记(脚本)的内容,它们会优雅地失败。

通过 HTML 注释掉脚本,这些浏览器将忽略内容而不是呈现它。

实际上,我怀疑这些浏览器中的任何一个仍在使用中,而且您现在可能不用 cmets 就可以逃脱。

【讨论】:

【参考方案2】:

它适用于上个世纪使用的一些旧浏览器。

您现在不再需要它们,但如果您编写 XHTML,使用 CDATA 被认为是一种很好的做法。

【讨论】:

javascript代码放在单独的文件中被认为是更好的做法。 这些天你告诉孩子们,他们不相信你!【参考方案3】:

这不再是必要的了。这只是作为一种向后兼容的黑客手段——当脚本第一次开始插入静态 HTML 页面时,大多数浏览器都无法支持它们。如果没有 cmets,他们将忽略 &lt;script&gt; 标记的语义(他们不理解),然后将脚本源发送到页面上。

具有讽刺意味的是,解决方案本身就是一个 hack - AFAIK,HTML 规范的任何部分都没有说应该在 cmets 内部解析脚本标签。所有浏览器都选择了这一事实似乎比其他任何事情都更加巧合。当然,对于 XHTML,cmets 就是 cmets,因此完全符合标准的浏览器将必须忽略您的脚本。

所以基本上,除非你想支持真的,真的旧浏览器(以破坏一些新浏览器为代价),否则不再需要这样做。

【讨论】:

我记得 //&lt;!--//--&gt; 的技巧,即您将 HTML 注释标签编写为 JavaScript cmets,以便脚本引擎以这种方式忽略它们。当然这意味着旧浏览器可能会从打开的评论标签中发出// +1 发表评论。将脚本标签本身包含在 cmets 中并不是有意的。【参考方案4】:

现在,如果您的页面被一个卫生分析器处理,该分析器只通过将&lt;script&gt; 标记重写为&lt;xscriptx&gt; 来进行清理,这仍然是一个问题。如果您留在评论标签中,那么如果脚本标签被清理,那么至少您的 javascript 仍然会被评论标签对用户隐藏。如果省略 cmets,代码将可见。

卫生解析器的一个例子是谷歌翻译、谷歌缓存或 Proxomitron。

【讨论】:

有趣。我遵循你的推理,但至少现在检查谷歌翻译和谷歌缓存,我没有看到任何这样的问题。

以上是关于为啥我需要在 HTML 中注释 <script> 标签?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“<!--”注释掉样式规则,而“<!--”没有?

为啥 Javascript 会忽略单行 HTML 注释?

为啥在设置中显示应用之前需要询问所有权限?

如何在 JSX 中添加可见的 HTML 注释?

在Markdown中写注释

当我在 plotly 中使用 ggplotly 函数时,为啥文本注释会丢失?