簡體   English   中英

javascript 塊中的 HTML 注釋?

[英]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 注釋已經很多年沒有必要了。 省略它們不會造成任何問題。

參考資料: http : //javascript.crockford.com/script.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM