再談IE中Flash控件的自動激活 ObjectWrap
我在Ajax中國上曾經(jīng)對比過國內(nèi)門戶網(wǎng)站對Flash激活限制的處理。除了qq.com,各大門戶網(wǎng)站上的flash都已經(jīng)解決了激活限制的問題。淘寶的頁面上也常常會使用到Flash,激活限制導致用戶的交互性體驗感受不夠友善。
我們一直想解決此問題。但是國內(nèi)門戶網(wǎng)站的做法都略為麻煩,要么需要為每個flash編寫額外的js,要么就是在頁面上放置flash的位置打上一塊<script>補丁,利用SWFObject或者UFO提供的腳本寫入flash。
網(wǎng)易的做法算是最技術(shù)的了,它的原理可以簡單說一下(感謝在網(wǎng)易工作的朋友的闡析):通過外部引入的js代碼覆蓋主頁面的document.write方法,這樣在主頁面上利用document.write方法時其實是外部文件的函數(shù)來寫入的,實現(xiàn)了active控件下載和主頁面分離。這樣也就避開了激活限制。
可是,以上的所有解決方法,F(xiàn)lash都是通過腳本來寫入的。比較注重web標準的網(wǎng)站會附上一段<noscript >來彌補禁用JavaScript的用戶。但大多數(shù)是置之不理。
一番google(我真的是用了yahoo,不過沒找到什么),在SitePoint上發(fā)現(xiàn)了一份很有價值的文獻ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如獲至寶。
ObjectSwap提供的實現(xiàn)只需要在<head>中引入一個腳本。雖然也是使用腳本,但其邏輯是在頁面加載完成后,重寫一次<object>標簽來實現(xiàn)自動激活。頁面中的flash依然是標準的HTML。不需要通過document.write寫入。而且對于禁用js的用戶Flash依然可以正常顯示。這應(yīng)該算是最unobtrusive的一種實現(xiàn)了。
最新的ObjectWrap 可以從這里下載。
原來的腳本有6k,我簡化了一些邏輯,并通過條件注釋讓腳本只為IE6/7服務(wù)。讓人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都會處理,這樣我們在安全登錄淘寶或者支付寶輸入密碼的時候,也可以節(jié)約一個單擊的氣力了。
至于為什么重寫<object>可以解決激活限制,就不要深究了,正如IE那一系列讓人抓狂的CSS hack。我們只能逼自己記住它,傻瓜才會去弄清楚為什么。
最后向ObjectWrap的作者 Karina Steffens 致敬!
相關(guān)文章
JavaScript 監(jiān)聽textarea中按鍵事件
不同的瀏覽器中的事件監(jiān)聽機制是不同的,以onKeyPress事件為例。2009-10-10
前端date.locale?is?not?a?function錯誤的簡單解決辦法
這篇文章主要給大家介紹了關(guān)于前端date.locale?is?not?a?function錯誤的簡單解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-09-09
網(wǎng)頁開發(fā)中的容易忽略的問題 javascript HTML中的table
最近在搞在線電子表格這個東西,下面的是使用中的一些知識技巧。2009-04-04
javaScript 刪除確認實現(xiàn)方法小結(jié)
因為對于內(nèi)容的刪除是件很重要的事,所以一般的系統(tǒng)中,都需要刪除確認一下,以免誤刪,具體的方法如下,大家可以參考下。2009-12-12
js對象實例詳解(JavaScript對象深度剖析,深度理解js對象)
下面小編就為大家?guī)硪黄猨s對象實例詳解(JavaScript對象深度剖析,深度理解js對象)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
谷歌showModalDialog()方法不兼容出現(xiàn)對話窗口的解決辦法
這篇文章給大家介紹了谷歌showModalDialog()方法不兼容出現(xiàn)對話窗口的解決辦法,解決辦法非常好,感興趣的朋友可以參考下2016-02-02

