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


67

过去,人们通常将HTML注释标签包装在JavaScript块周围,以防止“较旧的”浏览器显示脚本。即使Lynx足够聪明,也可以忽略JavaScript,那么为什么有些人会继续这样做呢?这些天有什么正当理由吗?

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

编辑:我遇到过一种情况。在“设计视图”中,某些代码编辑器(例如Dreamweaver)会在JavaScript字符串中被带引号的HTML引起混淆,并尝试将其显示为页面的一部分。


4
我猜这与肯·凯斯(Ken Keyes,Jr.)的“猴子/香蕉/梯子/喷水”实验有关。人们之所以继续这样做,是因为他们只是看到这样做了,却从不问原因。
Diodeus-James MacFarlane

-->应该是//-->
Andreas Rejbrand

Answers:


74

不,绝对不是。如今,任何用户代理,搜索引擎蜘蛛或绝对其他任何工具都足够聪明,可以忽略无法执行的Javascript。

只有一个非常短暂的时期对我们很有帮助,那是在1996年左右。


6
大声笑-有罪!但是后来,我在1996年学会了这样做,没有人说过与众不同……
史蒂文·A·洛

我想我已经阅读过它已被弃用,但找不到链接。
一些

20

现在没有充分的理由这样做了,因为需要这样做的浏览器已经从网络上消失了。

实际上,如果使用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>

因为如果您的代码中包含“ <”,“>”,“&”等,则该代码将无法验证:)


11
如果您想符合XHTML,否则不需要此功能。
詹森·邦廷

4
如果您确实想在格式良好的XML文档中使用Javascript,请将其放在外部.js文件中。例如,Mozilla XUL应用程序需要此功能。
MarkR

1
+1-每个人都应该努力符合XHTML,即使您必须考虑一些怪癖。有多种XML解析库/工具,只要经过验证,它们就不会与您的XHTML混淆。我们不要将XHTML变成新的草率HTML“过渡式”。
andreialecu

1
您也可以解析HTML。也可以使HTML有效。hixie.ch/advocacy/xhtml;)–
马塞尔·科佩尔

2
差异很小,但就我个人而言,我更喜欢使用//<![CDATA[//]]>-感觉更整洁,更易于阅读。
DisgruntledGoat

11

天哪,没有人需要它了,如果您这样做了,那么您还有更多问题需要关注。当您真正想要支持需要此功能的浏览器时,您必须提防更多的事情。甚至没有在说缺少CSS!

但是,更大的问题是人们做错了。实际上您的示例是错误的,因为该行

-->

应该读

//-->

其次,您输入的属性说“ text / JavaScript”也有什么问题。它一直是“文本/ javascript”(全部为小写),但是已经过时了(请参阅IANA列表),现在应该是“应用程序/ javascript”(请参阅另一个IANA列表。)但是,JS Guru的Douglas Crockford说:只是应该把它排除在外。

没有人提到的另一个问题是:在HTML注释中,不允许使用“-”,这意味着您不能使用“ x--”将x减1。


1

不必使用CDATA块是我更喜欢使用HTML 4.01 Strict作为我的docttype的原因之一,但是Staicu,我认为它使用了以下语法:

<script charset="utf-8">
//<![CDATA[

//]]>
</script>

也许两者是等效的?有人知道一个人比另一个人有优势吗?


//是行注释,/ * * /是块注释。您可以使用任何一个,对于javascript来说都是相同的(已注释)。但是你忘记了设置类型=“文/ JavaScript的”
一些

1
浏览器会忽略type =“ text / javascript”来支持服务器发送的MIME类型。遗漏是故意的。
Andrew Hedges

1
安德鲁:我不明白。这是嵌入在HTML文档中的脚本,那么它是text/javascript从哪里来的呢?另外,charset如果没有src属性,我不认为应该使用该属性,因为该charset属性指定了链接到使用该src属性的文件的字符集。
Andreas Rejbrand
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.