這問題不知道該責罵不會自動更新的IE6,還是該詛咒不懂向下相容的W3C標準。
這是FLASH傳統的嵌入方法:
< object classid = " clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 " codebase = " http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0 " width = " 32 " height = " 32 " >
< param name = " movie " value = " test.swf " />
< param name = " quality " value = " high " />
< embed src = " test.swf " quality = " high " pluginspage = " http://www.macromedia.com/go/getflashplayer " type = " application/x-shockwave-flash " width = " 32 " height = " 32 " ></ embed >
</ object >
使用object 和embed 標籤來嵌入,細心的會發現,object 的許多參數和embed 裡面的許多屬性是重複的。
有的瀏覽器支援object ,有的支援embed ,這也是為什麼要修改Flash 的參數時兩個地方都要改的原因。這種方法是Macromedia 一直以來的官方方法,最大限度的保證了Flash 的功能,沒有相容性問題。
但自從有了W3C標準,和一些極力要求通過該標準的客戶,事情複雜了:
embed被認為是非法的
embed 標籤是Netscape 的私有標籤,雖然embed 標籤應用廣泛存在,但從HTML3.2,HTML4.0到XHTML1.0,W3C都沒有收錄這個標籤。使用embed 標籤的頁面將無法通過W3C校驗。
其實他們這樣考慮也是正確的,大部分西方國家的用戶,正版vista系統基本上做到了普及,他們大多使用IE7.0/IE8.0等主流瀏覽器,使用這種簡介的標籤可以節省好幾行程式碼:
- < object type = " application/x-shockwave-flash " data = " test.swf " width = " 200 " height = " 100 " > < parm name = " movie " value = " test.swf /> </object>
但在盜版氾濫的中國,多數用戶仍然在使用windows xp系統上自備的IE6瀏覽器,而它是不支援object標籤的,只能使用變通的方式來解決。
目前的臨時辦法
既要符合標準,又想在所有瀏覽器中正確顯示flash該怎麼做?我們可以加入一段冗長的JavaScript來隱藏embed標籤:
- function getFlashObject ( flashSrc , objWidth , objHeight , etcParam ) {
- var tag = "" ;
- var baseFlashDir = "" ;
- flashSrc = baseFlashDir + flashSrc ;
- if ( etcParam != "" || etcParam != null ) {
- if ( etcParam . substr ( 0 , 1 ) == " ? " )
- flashSrc += etcParam ;
- else
- flashSrc += " ? " + etcParam ;
- }
- tag += " <object classid= " clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 " " ;
- tag += " codebase= " http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0 " " ;
- tag += " width= " " + objWidth + " " height= " " + objHeight + " " > " ;
- tag += " <param name= " movie " value= " " + flashSrc + " " /> " ;
- tag += " <param name= " quality " value= " high " /> " ;
- tag += " <param name= " wmode " value= " transparent " /> " ;
- tag += " <embed src= " " + flashSrc + " " quality= " high " pluginspage= " http://www.macromedia.com/go/getflashplayer " " ;
- tag += " type= " application/x-shockwave-flash " width= " " + objWidth + " " height= " " + objHeight + " " " ;
- tag += " wmode= " transparent " ></embed> " ;
- tag += " </object> " ;
- document . write ( tag ) ;
- }
不只如此,還需要在頁面中加入若干調用該JS的參數
- < script language = " JavaScript " type = " text/javascript " > getFlashObject ( ' images/test.swf ' , ' 100% ' , ' 100% ' , '' ) < / script>
那新的問題又出現了,如果使用者停用了javascript怎麼辦?
難道要先寫出更多的程式碼,判斷使用者使用的是什麼瀏覽器,然後再根據瀏覽器再輸出適當的程式碼?我靠,多影響頁面執行效率啊,為了一個W3C標準,多那麼多行程式碼,讓每個造訪自己網站的用戶多等待1秒鐘?
所以我想表達的觀點是:
目前,IE6普及的大環境下,暫時不要考慮W3C標準。用心做好自己的頁面,能少寫幾行程式碼就少寫幾行程式碼。不要為了標準去做標準。