癥狀:給某個元素的 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)
		}
		}
		}