|
最近做的事和Flash打交道比較多,簡(jiǎn)單來(lái)說(shuō),就是要在第三方的頁(yè)面引入一個(gè)Flash的廣告,播放一會(huì),讓用戶(hù)能夠關(guān)閉。
起初總覺(jué)得,就引入一個(gè)Flash嘛,adobe都給出了官方的使用方法,直接拿來(lái)用不就成了。頂多IE下不支持object元素的appendChild,大不了拼接字符串然后通過(guò)innerHTML來(lái)創(chuàng)建就好了。
但是真正做的時(shí)候,開(kāi)始測(cè)試各個(gè)瀏覽器的時(shí)候,才發(fā)現(xiàn)情況遠(yuǎn)沒(méi)有想的這么簡(jiǎn)單
關(guān)于如何引入Flash
這大概是最基本的問(wèn)題,其他的一切問(wèn)題都是基于Flash可以正確引入到DOM中這個(gè)前提的。
最先的方式自然是使用adobe給出的官方方式,即objectembed //object的結(jié)構(gòu)來(lái)嵌入一個(gè)Flash。根據(jù)各種資料,embed標(biāo)簽用于Firefox,而object標(biāo)簽用于IE,兩者合在一起,就是一相相對(duì)完美的方式。
但是事情絕對(duì)不會(huì)就這樣完結(jié),這個(gè)時(shí)候號(hào)稱(chēng)最先進(jìn)最標(biāo)準(zhǔn)的Chrome瀏覽器過(guò)來(lái)插了一腳:當(dāng)使用objectembed //object結(jié)構(gòu)來(lái)嵌入Flash時(shí),在Chrome中會(huì)出現(xiàn)Flash不顯示的問(wèn)題。
關(guān)于這個(gè)問(wèn)題,他必須有2個(gè)前提:
- 使用objectembed //object的結(jié)構(gòu)引入Flash。
- 在object前,有一個(gè)元素有background-image。
當(dāng)以上兩個(gè)條件都滿(mǎn)足時(shí),如果打開(kāi)這個(gè)頁(yè)面,特別是在本地打開(kāi),有一定機(jī)率會(huì)看不到Flash。但是Flash確實(shí)存在,甚至連Flash的聲音都可以聽(tīng)到,僅僅是瀏覽器沒(méi)有將其繪制在屏幕之上。
由于該問(wèn)題與網(wǎng)絡(luò)環(huán)境有著聯(lián)系,在本地特別容易重現(xiàn),可以將這個(gè)頁(yè)面的源碼保存為一個(gè)htm文件,在本地打開(kāi),刷新幾次,應(yīng)該就能看到這個(gè)問(wèn)題了。
為了這個(gè)問(wèn)題,最后決定推翻objectembed //object的DOM結(jié)構(gòu)。因?yàn)閛bject和embed兩者是獨(dú)立的,因此就在各瀏覽器之間測(cè)試了標(biāo)簽的兼容性,得出的結(jié)果是embed標(biāo)準(zhǔn)可以被現(xiàn)有的幾乎所有瀏覽器支持,包括了IE、Firefox、Chrome和Opera。最后,也在這篇文章上對(duì)引入Flash的方式有了最終的確認(rèn),僅使用embed標(biāo)簽足夠引入Flash。而在去除object標(biāo)簽后,Chrome下的詭異問(wèn)題也隨之消失了。
關(guān)于如何移除Flash
又是一個(gè)看上去很簡(jiǎn)單的問(wèn)題,最簡(jiǎn)單地代碼自然是:
var element = document.getElementById('someFlash');
element.parentNode.removeChild(element);
it知識(shí)庫(kù):引入Flash那些事,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。