<span style="display: none">hack ie</span> 雖然上面這段內(nèi)容有一定的長(zhǎng)度,但是它并不會(huì)顯示,而且這個(gè)插入的標(biāo)簽沒(méi)有 id 也沒(méi)有 name,所以也不會(huì)跟原來(lái)內(nèi)容中的某些標(biāo)簽的 id 或者 name 產(chǎn)生沖突。不過(guò)這里有一點(diǎn)要注意,這里也要判斷是否是 IE,然后再?zèng)Q定加不加這段內(nèi)容,因?yàn)槠渌承g覽器可能不支持 display: none 這個(gè) CSS 修飾(例如 Opera Mini),如果加上這段代碼會(huì)影響最終的顯示效果。
先來(lái)看外部腳本,如果是外部腳本,我們選擇了這樣一種方法,即先創(chuàng)建這個(gè)外部腳本的一個(gè)副本對(duì)象,并設(shè)置它的 defer 屬性為 true(這一點(diǎn)是為了讓 IE 瀏覽器能正確執(zhí)行),然后用 appendChild 方法將這個(gè)副本對(duì)象插入到 head 中。這里你可能會(huì)問(wèn),為什么不是插入到 innerHTML 所在的對(duì)象中呢?插入到 innerHTML 所在的對(duì)象中不是更好嗎?如果你試一下就會(huì)知道,如果插入到 innerHTML 所在的對(duì)象中,在 IE 瀏覽器中沒(méi)有問(wèn)題,但是在 Mozilla/Firefox 和 Opera 瀏覽器中會(huì)有一些問(wèn)題。問(wèn)題是如果在 Firefox 上這樣做,瀏覽器會(huì)停止響應(yīng)(這是在 Firefox 1.5 上的測(cè)試結(jié)果,其他版本是否有此問(wèn)題,尚不得知),而在 Opera 上,腳本會(huì)莫名其妙的執(zhí)行兩次(這是在 Opera 8.5 上的測(cè)試結(jié)果,其它版本的 Opera 是否由此問(wèn)題,也尚不得知)。為了避免這些問(wèn)題,所以我選擇了插入到 head 中。
再來(lái)看內(nèi)部腳本,內(nèi)部腳本的內(nèi)容我們可以直接用腳本對(duì)象的 text 屬性來(lái)獲取,這里我們使用腳本對(duì)象的 text 屬性而不是 innerHTML 屬性,是因?yàn)樵?Opera 瀏覽器中,腳本對(duì)象的 innerHTML 屬性是空的,只有用 text 屬性才能獲取到腳本內(nèi)容。執(zhí)行內(nèi)部腳本直接用 eval 即可。但是腳本可能會(huì)被包含在 HTML 的注釋標(biāo)簽中,因此我們需要先將注釋標(biāo)簽去掉,不然在 IE 中會(huì)出錯(cuò)。