使用 HTML 注释标签 <!-- --> 仍然与 JavaScript 代码相关吗?

IT技术 javascript browser
2021-01-16 20:14:29

在 JavaScript 代码周围使用 HTML 注释标签是否仍然相关?

我是说

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

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;分别。

当您想将 ']]>' 作为字符串的一部分包含时,您会怎么做?
2021-03-14 20:14:29
实际上,今天仍然在 js 代码周围使用 html 注释可能是有意义的。Googlebot 会抓取在 js 代码中找到的“看起来像一个 url”(根据我不知道是什么标准)的任何字符串,就好像它是一个链接一样。我知道这完全是痴呆症,但确实如此。在许多情况下,您可能有看起来像 url 但不是有效 url 的字符串,因此您不希望 Google 的爬虫用无意义的请求来惹恼您的服务器。如果 js 代码包含在 html 注释中,那么一些似乎知道他说什么的人可以确保 googlebot 不会抓取 look-like-url js 字符串。goo.gl/ZRW1Y 还没有尝试过
2021-03-25 20:14:29
@dreamlax ]]>]]<![CDATA[>
2021-03-30 20:14:29
@dreamlax:你必须把它分解成碎片。人们有同样的问题,</script>通常会被分解为</script>
2021-03-31 20:14:29
如果目标是说服 HTML/XML 验证器(现在很多人<script>都正确理解这些东西),那么我看不到CDATA传统注释上方的块的显着优势唯一的区别是<script>官方是否有内容——而对于搜索引擎,我们可能希望它没有内容......
2021-04-09 20:14:29

不是真的,除非你的目标是 20 岁的浏览器。

@kangax:比那更糟——如果我没记错的话,Netscape Navigator 2。
2021-03-22 20:14:29
不,Internet Explorer 2。Netscape 从 2.0 开始支持 Javascript
2021-03-23 20:14:29

最好一起避免在正文中使用 JavaScript。它使更新更容易,避免了评论的需要,并强制您为非 JavaScript 启用的用户以及启用 JavaScript 的用户制定计划。

许多网站和框架的另一个常见策略,例如 wordpress,是在 js 文件 URI 中添加查询字符串,以便在查询字符串更改时强制重新加载文件。例如:<script type="text/javascript" src="http://example.com/path/to/file.js?v1.0"></script>
2021-03-15 20:14:29
有时将所有 javascript 放在.js文件中而不是 HTML 中,会使更新变得更加困难,因为.js文件可能会被缓存。
2021-03-19 20:14:29
我从一个文件夹中链接我的 javascript 文件,该文件夹的名称是我的 Web 应用程序的当前版本。
2021-03-30 20:14:29

不是你这样做的方式,不。

<!-- 在 JavaScript 中的处理方式与 // 相同,因此您的代码应如下所示:

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

..与你的不同之处在于,一个罕见的、可能不理解脚本标签的晦涩浏览器会将开头 // 打印到屏幕上,这违背了将评论标签放在首位的目的。

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

然而,最终即使是默认不支持 javascript 的超级晦涩的浏览器(如 HTMLLayout 浏览器或 Netsurf)也知道最好不要在脚本标签之间呈现文本,所以不,它无论如何都不再相关。然而,你可能关心的所有浏览器都理解 <!-- 语法,所以没有必要疯狂地担心从你已经拥有的东西中删除它,因为它是有效的 js,记住下次不要添加它。

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

我有一个在 上提供的 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 注释,因为它是一个简洁的更改,不需要复制或考虑每个链接文件。