我有一个像下面这样的函数(在下面),它在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样式注释?
修改
我输错了。结束评论为://-->
。
答案 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注释多年来一直没有必要。省略它们不会造成任何问题。