[英]HTML comments in a javascript block?
我有一個這樣的函數(如下),它在 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 注釋的情況下對其進行了測試,並且它們成功呈現。
我的理解是在 Netscape 的早期版本中使用了這樣的 HTML 注釋,以防止瀏覽器與 javascript 不兼容的問題。
是否有任何其他原因(或任何充分的理由)在 javascript 塊中包含 HTML 樣式注釋?
編輯我打錯了。 結束注釋是: //-->
。
實際上,只有<!--
是有效的 javascript。 要在 javascript 中結束 html 注釋,您實際上需要使用//-->
。
現在已經不再需要在 Javascript 中使用 HTML 注釋了。 太老以至於無法理解<script>
標簽的瀏覽器極不可能在“現代”網站上呈現大部分內容,而且您不應該適應那些完全使用石器時代瀏覽器的用戶.
但是,如果您打算將 HTML 包含在 xml 文檔中,和/或正在編寫 x-html,那么您必須使用 xml <![CDATA[
和]]>
附件,作為各種 Javascript 運算符( &
、 <
和>
特別是)將導致沒有附件的 XML 解析錯誤。
這是瀏覽器和 JavaScript 引擎一直實現的先前非標准功能。 如今,它不能從 Web 平台中刪除,因為這會破壞向后兼容性。 它在JavaScript / Web ECMAScript 規范中有詳細說明:
<!--
必須被視為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
更新:這現在是 ECMAScript 規范的上游。 有關更多背景信息,請參閱取消 JavaScript 標准。
不,沒有理由將它們包括在內。 我經常忽略這些評論,並且對現代瀏覽器沒有任何問題。
通過innerHTML
設置的字符串內的<script>
永遠不會運行(主要是因為它從未在IE 中運行,然后站點依賴於它,所以當其他瀏覽器對innerHTML
實現進行逆向工程時,他們也必須這樣做)。 那里的 HTML 注釋是一個紅鯡魚。
如果您需要運行<script>
,則需要使用其他一些插入節點的方法(例如createContextualFragment
)。
腳本塊中的 HTML 注釋已經很多年沒有必要了。 省略它們不會造成任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.