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