使用HTML注释标记<!-->是否与JavaScript代码相关?


80

在JavaScript代码周围使用HTML注释标记仍然有意义吗?

我的意思是

<html>
    <body>
        <script type="text/javascript">
            //<!--
            document.write("Hello World!");
            //-->
        </script>
    </body>
</html>

请考虑在浏览器旁边使用的JavaScript。还排除非常老的浏览器。
rajakvk

Answers:


108

HTML注释,即 <!-- -->,不再需要。它们旨在允许不理解该<script>标记的浏览器正常降级。这些浏览器,例如 Netscape 1.x不再在野外找到。因此,再也没有必要在脚本标记中添加HTML注释了。

如果希望HTML验证为XHTML或XML,则可能要使用注释掉的CDATA标记。


<script type="text/javascript">
//<![CDATA[
document.write("Hello World!");
//]]>
</script>

这样做的原因是为了确保你<>&"'这是你的JavaScript代码部分不会有被编码为&lt;&gt;&amp;&quot;&apos;分别。


3
要在字符串中包含']]>',该怎么办?
dreamlax 2010年

6
@dreamlax:您必须将其分解成碎片。人们有同样的问题,</script>通常会分解为</script>
Asaph

6
实际上,今天仍然可以在js代码周围使用html注释。Googlebot将抓取在js代码中找到的“看起来像url”的字符串(根据我不知道什么条件),就好像它是链接一样。我知道这完全是痴呆症,但确实如此。在许多情况下,您可能会有看起来像url但不是有效url的字符串,因此您不希望Google的搜寻器用无意义的请求来烦扰您的服务器。如果js代码包含在html注释中,那么一些似乎知道他说的话的人会确保googlebot不会抓取外观相似的url js字符串。goo.gl/ZRW1Y已尝试过
matteo

2
@dreamlax ]]>]]<![CDATA[>
IllidanS4支持莫妮卡

1
如果目标是让HTML / XML验证器更方便(如今,许多验证器<script>正确理解了这些内容),那么我认为CDATA传统注释上方的代码块没有显着的优势。唯一的区别是<script>官方是否具有内容-关于搜索引擎,我们可能希望它不具有内容...
BurninLeo


14

最好只是一起避免体内使用JavaScript。它使事情更容易更新,避免了注释的需要,并迫使您为未启用JavaScript的用户以及启用JavaScript的用户进行计划。


8
有时,将所有JavaScript放在.js文件中而不是HTML中,会使更新变得更加困难,因为.js可能会缓存文件。
Asaph,

11
我从一个文件夹中链接了我的JavaScript文件,该文件夹的名称为Web应用程序的当前版本。
herzmeister 2010年

3
许多网站和框架(例如wordpress)的另一种常见策略是将查询字符串添加到js文件URI中,以便在查询字符串更改时强制重新加载文件。例如:<script type="text/javascript" src="http://example.com/path/to/file.js?v1.0"></script>
Will B.

5

不是您做事的方式,不。

<!-与javascript中的//相同,因此您的代码应如下所示:

<script type="text/javascript">
<!--
document.write("Hello World!");
//-->
</script>

..与您的不同之处在于,一种罕见的,可能无法理解script标签的浏览器会在屏幕上显示//开头,这违背了将comment标签放在第一位的目的。

如果您好奇的话,这里有更多信息:http : //www.javascripter.net/faq/comments.htm

但是最后,即使是默认情况下不支持javascript的超级晦涩的浏览器(如HTMLLayout浏览器或Netsurf)也知道最好不要在脚本标签之间呈现文本,因此不,它不再与任何方式相关。但是,您可能会关心的所有浏览器都了解<!-语法,因此没有真正的必要疯狂地担心将其从现有内容中删除,因为它是有效的js,请记住不要在下次添加它。


0

即使在现代浏览器中,它也很有用。我今天实际上遇到了这个问题,正是因为我想避免将javascript嵌入我的html中。

我有一个是担任了一个HTML页面http://host/variable_app_name/pagename,在这里variable_app_name可以有很多值(你知道的,可变的)。如果要访问静态文件,则必须使用url这样的网址http://host/static/variable_app_name/filename,因此如果不先查看浏览器的位置以查找的值,就无法指定静态文件的位置variable_app_name

要链接到主要的javascript文件,请执行以下操作:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
</script>

即使在最新版本的Chrome中,上述代码也会爆炸,因为script标签将在javascript字符串的中间终止,而字符串的其余部分将被解释为html,如下所示:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js">
</script>
\n');
</script>

有很多方法可以解决此问题,但是我喜欢使用html注释。

带有html注释:

<script type="text/javascript" >
<!--
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
-->
</script>

分解javascript字符串:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></scr'+'ipt>\n');
</script>

创建并附加脚本标签,而不是使用document.write:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = '/static/'+variable_app_name+'/pagename.js';
   document.head.appendChild(script);
</script>

我喜欢使用html注释,因为这是一个简洁的更改,不需要为每个链接文件进行复制或考虑。

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.