innerHTML動態新增html程式碼和腳本相容多個瀏覽器_javascript技巧
症狀:給某個元素的 innerHTML 設定值時,如果提供的 HTML 程式碼中包含js腳本,很多時候這些腳本無效,或者在某種瀏覽器上有效,但在其它瀏覽器上無效。
原因:不同瀏覽器對插入 innerHTML 中的腳本有不同的處理方法。經過實踐,歸納如下:
對於IE,首先, script 標籤必須帶 defer 屬性,其次,在插入時刻,innerHTML 的所屬節點必須在 DOM 樹中.
對於 Firefox 和Opera,在插入時刻,innerHTML 的所屬節點不可以在 DOM 樹中。
根據上述結論,給出通用的設定 innerHTML 方法:
/*
* 說明:跨瀏覽器的設定 innerHTML 方法
* 允許插入的 HTML 程式碼中包含 script 和 style
* 參數:
* el: DOM 樹中的節點,設定它的 innerHTML
* htmlCode: 插入的 HTML 程式碼
* 經測試的瀏覽器:ie5 , firefox1.5 , opera8.5
*/
var set_innerHTML = function (el, htmlCode)
{var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') {htmlCode = ' ' htmlCode;
htmlCode = htmlCode.replace(/<script>]*)>/gi,'<script$1 defer="true">');<br /> el.innerHTML = htmlCode;<br /> el.removeChild(el.firstChild);<br /> }<br /> else <br /> {var el_next = el.nextSibling;<br /> var el_parent = el.parentNode;<br /> el_parent.removeChild(el);<br /> el.innerHTML = htmlCode;<br /> if (el_next)<br /> el_parent.insertBefore(el, el_next)<br /> else<br /> el_parent.appendChild(el);<br /> }<br /> }<br /> </script>
上面的程式碼還有一個問題:如果插入的 HTML 程式碼包含 document.write 語句,那麼就會破壞整個頁面。對於這種情況,可以透過重新定義 document.write 來避免。程式碼如下:
/*
說明:重定義 document.write 函數.
避免使用 set_innerHTML 時,插入的 HTML 程式碼包含 document.write 語句,導致原頁受到破壞。
*/
document.write = function(){
var body = document.getElementsByTagName('body')[0];
for (var i = 0; i argument = arguments[i];
if (typeof argument == 'string') {
var el = body.appendChild(document.createElement('div'));
set_innerHTML(el, argument)
}
}
}

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...
