javascript 块中的 HTML 注释?

IT技术 javascript html
2021-03-12 21:05:47

我有一个这样的函数(如下),它在 HTML 页面中插入一段 HTML 代码:

function someEventHandler(htmlContent)
{
  document.getElementById('some-element-id').innerHTML = htmlContent;
}

这适用于包含img标签的HTML 代码

<script>但是,当 HTML 代码包含块时,它们不会呈现。此外,脚本块包含被 HTML 注释包围的 JavaScript。例如:

<script type="text/javascript">
<!--
    function someFunctionThatRendersStaticImageOrFlash()...
-->
</script>

这些包含 HTML 注释的脚本块在插入后不会呈现。我可以控制插入的代码,并且在没有 HTML 注释的情况下对其进行了测试,并且它们成功呈现。

我的理解是在 Netscape 的早期版本中使用了这样的 HTML 注释,以防止浏览器与 javascript 不兼容的问题。

是否有任何其他原因(或任何充分的理由)在 javascript 块中包含 HTML 样式注释?

编辑 我打错了。结束语是://-->

5个回答

实际上,只有<!--有效的javascript。要在 javascript 中结束 html 注释,您实际上需要使用//-->.

现在已经不再需要在 Javascript 中使用 HTML 注释了。太老以至于无法理解<script>标签的浏览器极不可能在“现代”网站上呈现大部分内容,并且您不应该适应那些完全使用石器时代浏览器的用户。

但是,如果您打算将 HTML 包含在 xml 文档中,和/或正在编写 x-html,则必须使用 xml<![CDATA[]]>附件,因为各种 Javascript 运算符(&, <>尤其是)会导致没有附件的 XML 解析错误。

实际上,当它位于行首时-->被视为SingleLineComment(相当于//),可选地前面有空格或MultiLineComments。我的回答
2021-04-15 21:05:47
谢谢马克!我刚刚打错了结束评论,实际上是您输入的方式 - //-->我相信该代码起源于通过 Google 的双击服务的自动化工具。希望我将来可以编辑自动化代码。
2021-04-26 21:05:47

这是浏览器和 JavaScript 引擎一直实现的先前非标准功能。如今,它不能从 Web 平台中删除,因为这会破坏向后兼容性。JavaScript / Web ECMAScript 规范中有详细说明

<!--必须被视为 a SingleLineComment的开始,相当于//

var x = true;
<!-- x = false; // note: no syntax error
x; // true

-->在一行的开头,可选地前面有空格或 MultiLineComments,必须被视为SingleLineComment— 等效于//

var x = true;
--> x = false; // note: no syntax error
x; // true

var x = 1;
/*
multiline comment!
x = 2;
*/ --> x = 3;
x; // 1

更新:这现在是 ECMAScript 规范的上游有关更多背景信息,请参阅取消 JavaScript 标准

似乎链接已损坏,我相信规范在tc39.es/ecma262/#sec-html-like-comments
2021-04-25 21:05:47

不,没有理由将它们包括在内。我经常省略这些评论,并且对现代浏览器没有任何问题。

<script>通过innerHTML从不运行设置的内部字符串(主要是因为它在 IE 中从来没有,然后站点依赖于它,所以当其他浏览器对innerHTML实现进行逆向工程时,他们也必须这样做)。HTML 注释有一个红鲱鱼。

如果您需要<script>运行 ,则需要使用其他一些插入节点的方法(例如createContextualFragment)。

嗯,这就是实际使用的内容(jQuery): $('#some-element-id').html(htmlContent);
2021-04-27 21:05:47
@MikeMoore - jQuery 检测传递给的字符串何时html()包含脚本块,如果是,则不使用 innerHTML。它将明确地eval()为您提取脚本块和它们。有关详细信息,请参阅此线程
2021-05-11 21:05:47

脚本块中的 HTML 注释已经很多年没有必要了。省略它们不会造成任何问题。

参考资料:http : //javascript.crockford.com/script.html