HTML插入Flash的全相容完美解決方案-SWFObject
Flash 嵌入的問題朋友們可能認為很簡單,但是具體到一些問題上來講,就不是那麼簡單了,比如:IE瀏覽器對FLASH的攔截虛框怎麼去掉?在FF、OP、NS等其它瀏覽器是否相容?程式碼是否符合W3C標準??等等
下面我就轉貼別人的一篇檔案,共同學習一下
一、傳統的方法
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id="Untitled-1" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="mymovie.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="mymovie.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="mymovie" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
這方法是使用 object 和 embed 標籤來嵌入,細心的會發現,object 的很多引數和 embed 裡面的很多屬性是重複的,為什麼這樣做?為了瀏覽器相容性,有的瀏覽器支援 object,有的支援 embed,這也是為什麼要修改 Flash 的引數時兩個地方都要改的原因。
這種方法是 Macromedia 一直以來的官方方法,最大限度的保證了 Flash 的功能,沒有相容性問題。但是它現在不那麼好用了: 無法通過驗證,由於為了相容性而嵌入的 embed 標籤是不符合 W3C 的規範的。當然,如果你不在乎什麼規範不規範,另當別論。
微軟由於種種原因,在 sp2 後限制了 IE 的 ActiveX 的使用模式,就是在頁面中的 ActiveX 有一個虛框,需要使用者點選一次才能正常互動。Flash是作為一個 ActiveX 嵌入到網頁中的,所以它也會受牽連,只有通過 JS 嵌入 Flash 才能解決這個問題。
沒有 Flash 版本檢測,如果版本瀏覽器的flash外掛版本不夠,或者不能正常顯示你的 swf 檔案,或者會彈出一個 ActiveX 的確認安裝的框——這個框對很多使用者來說是很恐怖的。
二、用JS嵌入的方法
用JS嵌入就是各有各的嵌入方法了,有嵌得好的有嵌得不好的。有人用 document.write 直接寫,這法子說實話不大好,感覺 hack 成分多了,有點為了驗證而驗證的意思,而且沒有體現出什麼 JS 的優勢。我覺得一個好的 JS 嵌入指令碼,在保證 Flash 應有功能的基礎上,要發揮 JS 的優勢應該要有版本檢測,要能很好解決可訪問性問題(也就是使用者在無法瀏覽 Flash 內容或禁用 JS 的時候應該如何處理的問題),要易於重複使用。
我們這裡要講的是SWFObject這個解決方案:
“SWFObject”是利用Javascript 插入flash,好處多多,程式碼簡潔,不會出現IE6下的“單擊此處以啟用控制元件”的提示,並且能通過W3C驗證。不同於傳統的“object”插入flash的方法。
SWFObject在新的2.x版本中,其最簡單的呼叫竟只需一句話,並且不需要等待頁面載入完成,這意味著你可以將這句話寫在頁面的任何地方。比以前的版本,要簡便多了。下面來看幾個簡單常用的呼叫方法:
1、最簡單,最基本,只要想插入flash都能用到的經典一句話。
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("test.swf", "swfid", "300", "120", "9.0.0", "expressInstall.swf");
</script>
註解:呼叫方法embedSWF——插入SWF檔案,引數依次是@swf檔案的地址;@用於裝入swf檔案的容器(如div)的id;@flash的寬度;@flash的高度(當然,這裡的寬高都可以使用諸如100%這樣的百分比來表示);@正常播放該flash所需的最低版本;@當版本低於要求時,執行該swf檔案,這裡利用這個flash跳轉到官方下載最新版本的flash外掛。(該引數可以省略)在同一個頁面插入多個flash到不同位置時,只要重複上面的語句,使用不同的容器id就可以了。
2、給swf檔案傳遞引數、變數、屬性的呼叫方法
<script type="text/javascript">
//1、使用Json初始化變數、引數、屬性
var flashvars = {
name1: "hello",
name2: "world",
name3: "foobar"
};
var params = {
menu: "false"
};
var attributes = {
id: "dynamicContent2",
name: "dynamicContent2"
};
swfobject.embedSWF("test6_flashvars.swf", "content2", "300", "120", "6.0.0", "expressInstall.swf", flashvars, params, attributes);
//2、傳統的初始化設定,效果一樣
var flashvars = {};
flashvars.name1 = "hello";
flashvars.name2 = "world";
flashvars.name3 = "foobar";
var params = {};
params.menu = "false";
var attributes = {};
attributes.id = "dynamicContent3";
attributes.name = "dynamicContent3";
swfobject.embedSWF("test6_flashvars.swf", "content3", "300", "120", "6.0.0", "expressInstall.swf", flashvars, params, attributes);
//3、直接寫在後面,就一句話,簡潔剽悍,不拖泥帶水
swfobject.embedSWF("test6_flashvars.swf", "content5", "300", "120", "6.0.0", "expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"dynamicContent5",name:"dynamicContent5"});
</script>
SWFObject google 開源專案 http://code.google.com/p/swfobject/
SWFObject(2.2版) 下載地址:http://swfobject.googlecode.com/files/swfobject_2_2.zip
SWFObject(2.0版) 下載地址:http://swfobject.googlecode.com/files/swfobject_2_0.zip
SWFObject的官方Blog:http://blog.deconcept.com/swfobject/
SWFObject 2.0 官方文件(中文) http://www.admin10000.com/resource/1.html
相關文章
- html轉PDF檔案,完美解決方案——jsPDF,htmltocanvas,pdfmake,wkhtmltopdf,TuesPechkin,snappyHTMLJSCanvasAPP
- WPF中不規則窗體與WindowsFormsHost控制元件的相容問題完美解決方案WindowsORM控制元件
- Prometheus告警帶圖完美解決方案Prometheus
- Vue 相容 ie9 的全面解決方案VueIE9
- React 服務端渲染方案完美的解決方案React服務端
- 噁心的相容問題:完美解決IE(IE6/IE7/IE8)不相容HTML5標籤的問題HTML
- 完美解決html中select的option不能隱藏的問題。HTML
- mysql8.0插入慢的問題解決方案(一)MySql
- React 服務端渲染完美的解決方案React服務端
- 常見的跨域解決方案(全)跨域
- 秒云云原生信創全相容解決方案,推動信創產業加速落地產業
- Unity Android il2cpp的完美熱更解決方案UnityAndroid
- 模切行業完美解決方案的模切ERP系統行業
- HTML載入FLASH(*.swf檔案)詳解HTML
- 解決部落格園TinyMCE模式下內建插入程式碼塊功能不支援Go語言的問題(兩個並不完美的解決方案)模式Go
- 移動端滾動穿透問題完美解決方案穿透
- Winform窗體圓角以及描邊完美解決方案ORM
- iview在ie9及以上的相容問題解決方案ViewIE9
- 【RocketMq】商用RocketMq和開源RocketMq的相容問題解決方案MQ
- 移動端相容性問題解決方案(一)
- angular瀏覽器相容性問題解決方案Angular瀏覽器
- 微信小程式動態載入外部字型的完美解決方案微信小程式
- 海外靜態住宅IP代理:繞過地理限制的完美解決方案
- 完美解決流氓軟體主頁劫持的新方案,小白可用
- html插入cssHTMLCSS
- 全鏈路風控解決方案深度解讀
- 【Flutter】修改flutter_boost,相容iOS側滑的一個解決方案FlutteriOS
- 2018年Ubuntu 下裝 QQ 比較完美的解決方案Ubuntu
- 刪除事件(解綁事件)/ 刪除事件相容性解決方案事件
- 移動端常見相容性問題解決方案
- 主流瀏覽器相容性問題與解決方案瀏覽器
- JavaScript魔法:線上Excel附件上傳與下載的完美解決方案JavaScriptExcel
- 解決舊版本flash的更新檢測 提示 flash版本過舊 的方法
- Html2canvas——圖片空白的幾種排查解決方案HTMLCanvas
- 【轉】 android獲取裝置唯一標識完美解決方案Android
- 網路直播平臺搭建,瀑布流佈局完美解決方案
- windows 電腦下使用pyenv安裝python太慢 完美解決方案WindowsPython
- iOS全埋點解決方案-介面預覽事件iOS事件
- iOS全埋點解決方案-採集奔潰iOS