javascript块中的HTML评论?

时间:2011-04-25 15:37:14

标签: javascript html

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

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

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

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

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

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

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

是否有任何其他原因(或任何正当理由)在JavaScript块中包含HTML样式注释?

修改 我输错了。结束评论为://-->

5 个答案:

答案 0 :(得分:16)

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

现在不再需要在Javascript中使用HTML注释了。浏览器如此陈旧以至于不能理解<script>标签,它们不太可能在“现代”网站上呈现任何东西,而且您不应该容纳那些完全在石头上的用户 - 年龄浏览器。

但是,如果您打算将HTML包含在xml文档中,和/或正在编写x-html,那么您将不得不使用xml <![CDATA[]]>附件,因为各种Javascript运算符(特别是&<>)将导致XML解析错误,而不包含附件。

答案 1 :(得分:8)

这是浏览器和JavaScript引擎始终实现的非标准功能。如今,它无法从Web平台中删除,因为这会破坏向后兼容性。这是detailed in the JavaScript / Web ECMAScript spec

  

<!--必须被视为SingleLineComment的开头 -   相当于//

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

-->在一行的开头,可选地前面有空格或   MultiLineComment s,必须视为SingleLineComment -   相当于//

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:4)

通过<script>设置的字符串中的

innerHTML从不运行(主要是因为它在IE中从未有过,然后网站依赖于此,因此当其他浏览器对其进行逆向工程innerHTML实施时这样做也是。 HTML评论有一个红色的鲱鱼。

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

答案 4 :(得分:2)

脚本块中的HTML注释多年来一直没有必要。省略它们不会造成任何问题。

参考文献:http://javascript.crockford.com/script.html