国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

innerHTML動態添加html代碼和腳本兼容多個瀏覽器

2024-05-06 16:09:34
字體:
來源:轉載
供稿:網友
innerHTML動態添加html代碼和腳本,給某個元素的innerHTML賦值,并使得值中的js代碼有效且兼容多個瀏覽器,很棒的一個方法
 
 

癥狀:給某個元素的 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') < 0) 
{htmlCode = '<div style="display:none">for IE</div>' + htmlCode;
htmlCode = htmlCode.replace(/<script([^>]*)>/gi,'<script$1 defer="true">');
el.innerHTML = htmlCode;
el.removeChild(el.firstChild);
}
else 
{var el_next = el.nextSibling;
var el_parent = el.parentNode;
el_parent.removeChild(el);
el.innerHTML = htmlCode;
if (el_next)
el_parent.insertBefore(el, el_next)
else
el_parent.appendChild(el);
}
}

上面的代碼還有一個問題:如果插入的 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 < arguments.length; i++) {
argument = arguments[i];
if (typeof argument == 'string') {
var el = body.appendChild(document.createElement('div'));
set_innerHTML(el, argument)
}
}
}

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 永新县| 高要市| 洛浦县| 分宜县| 德保县| 杭锦旗| 崇文区| 靖边县| 博湖县| 阳城县| 安化县| 思茅市| 泾源县| 梁河县| 阿拉尔市| 忻州市| 伊金霍洛旗| 湘潭市| 乾安县| 新民市| 花垣县| 农安县| 定结县| 永仁县| 湾仔区| 辽中县| 南京市| 共和县| 博客| 泰宁县| 荣昌县| 刚察县| 襄城县| 长岛县| 祁门县| 阳信县| 荃湾区| 朝阳县| 新兴县| 双流县| 四会市|