在JavaScript块上使用HTML注释仍然有意义吗?

70

在过去,人们会将HTML注释标签包裹在JavaScript代码块周围,以防止“老旧”的浏览器显示该脚本。即使Lynx也足够聪明,可以忽略JavaScript,那么为什么有些人仍然这样做呢?这些天是否还有任何有效的理由?

<script type="text/javascript">
<!--
//some js code
//-->
</script>

编辑:我遇到过一种情况。 一些代码编辑器(例如Dreamweaver)无法在“设计视图”中正确处理JavaScript字符串中带引号的HTML,并尝试将其作为您页面的一部分显示。


5
我想这与肯·基斯小猴子/香蕉/梯子/水喷实验有些关系。人们一直这样做,是因为他们只看到别人这么做,却从未问过为什么。 - Diodeus - James MacFarlane
1
--> 应该改为 //--> - Andreas Rejbrand
1
@Diodeus-JamesMacFarlane 我来了。 "Ken Keyes, Jr. "猴子/香蕉/梯子/喷水"实验"是什么?最好的猜测:这个东西关于猴子永远清洗甜土豆,因为它们看到他们的父母清洗沙土豆(显然不是真实的故事?),也就是货柜式崇拜的一个版本(显然是真的。当涉及到开发人员时肯定是真的)。 - ruffin
@ruffin 或者这个故事 是关于猴子们学会避免攀爬梯子的故事,这些猴子从那些每次攀爬梯子都被水泼到的猴子身上学到了。新的猴子们继续保持着相同的行为,即使它们从未见过水。 - Liam
1
@Liam 除了这个红薯链接解释了红薯和梯子的故事都是虚构的。而启发梯子故事的猴子是黑猩猩。没有尾巴,聪明,几乎像人类一样。别@我。:^D 但是是的,在软件开发领域有很多优秀的货物崇拜者。我打赌,如果我在工作中放一把梯子,顶部放咖啡,并且有一根消防水龙带... ;^D 怎么会有&的表情符号,却没有黑猩猩!?! - ruffin
5个回答

78

不行,绝对不行。任何用户代理、搜索引擎蜘蛛或其他任何东西现在都足够聪明,如果无法执行 JavaScript,则会忽略它。

只有在大约1996年左右,这种做法才有一段非常短暂的时间是可行的。


7
LOL - 有罪!但是,我在1996年学会了这个技能,从来没有人说过不行... - Steven A. Lowe
我认为我读过它已经被弃用了,但我找不到链接。 - some
浏览器需要忽略它们无法识别的标签。Netscape Navigator 1.0存在一个错误,它不会忽略这些标签,而是渲染其中的文本。这个问题在NN 2.0(1995年)中得到了修复,但人们使用注释作为有缺陷的NN 1.0的解决方法。几十年来这已经不再是问题了 - 我们现在可以停止这样做了。 - Ian Boyd

21

现在不再需要这样做了,因为那些需要这样做的浏览器在网页中已经大部分消失了。

事实上,如果使用XHTML,这样做可能会导致某些旧浏览器意外出现问题- 来自developer.mozilla.org:

  • Mozilla 1.1+/Opera 7

    不应用CSS或执行JavaScript。

  • Netscape 7.0x/Mozilla 1.0.x

    不应用CSS但会执行JavaScript。

  • Internet Explorer 5.5+

    无法显示文档。

该网站还链接到几个问题的示例。


14

你应该使用 CDATA 保留文本内容...

<script type="text/javascript" charset="utf-8">
/* <![CDATA[ */

/* ]]> */
</script>

因为如果您的代码中有'<','>','&'等字符,该代码将无法验证 :)


13
如果您想符合XHTML标准,否则您不需要这个。 - Jason Bunting
4
如果你真的想在格式良好的 XML 文档中使用 JavaScript,请将其放在外部 .js 文件中。例如,Mozilla XUL 应用程序就需要这样做。 - MarkR
1
+1 - 每个人都应该努力实现XHTML兼容性,即使你必须考虑一些怪癖。有各种XML解析库/工具,如果验证通过,则会更少地混淆您的XHTML。让我们不要把XHTML变成新的松散的HTML“过渡”。 - andreialecu
1
您还可以解析HTML;HTML也可以被验证;http://hixie.ch/advocacy/xhtml ;) - Marcel Korpel
2
虽然只是一个小差别,但我个人更喜欢使用 //<![CDATA[//]]> - 感觉更整洁、更易读。 - DisgruntledGoat
显示剩余3条评论

12

天啊,没人需要这个了,如果你还需要它的话,那就有更多问题需要关注了。如果你真的想支持需要这个的浏览器,你需要注意更多的事情。更不要提缺乏 CSS 了!

然而,更大的问题是,人们做得都是错的。实际上,你的例子是错误的,因为该行应该是:

-->

应该阅读

//-->

其次,您输入的属性为"text/JavaScript",这也是错误的。正确的应该是"text/javascript"(全部小写),但这已经过时了(请参见IANA列表),现在应该是"application/javascript"(请参见另一个 IANA 列表)。不过,JS大师Douglas Crockford建议您将其省略。

还有一个问题是:在HTML注释中,"--"是不允许的,这意味着您不能使用"x--"来将x减1。


1
不必使用CDATA块是我喜欢使用HTML 4.01 Strict作为我的文档类型的原因之一,但是,Staicu,我认为它使用以下语法:
<script charset="utf-8">
//<![CDATA[

//]]>
</script>

也许这两者是等价的?有人知道其中一个比另一个更有优势吗?


// 是单行注释,/* */ 是多行注释。你可以使用任意一种方式,在 JavaScript 中它们是相同的(都被注释掉了)。但你忘记设置 type="text/javascript" 了。 - some
1
type="text/javascript"被浏览器忽略,而是优先使用服务器发送的MIME类型。它的省略是有意的。 - Andrew Hedges
1
安德鲁:我不明白。这是嵌入在HTML文档中的脚本,那么text/javascript从哪里来?此外,如果没有src属性,我认为您不应该使用charset属性,因为charset属性指定了使用src属性链接到的文件的字符集。 - Andreas Rejbrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接