1.embed是非法的
<embed>標籤是Netscape的私有標籤,雖然<embed>標籤應用廣泛存在,但從HTML3.2,HTML4.0到XHTML1.0,W3C都沒有收錄這個標籤。使用<embed>標籤的頁面將無法通過W3C校驗。
2.應該用object
W3C推薦的是<object>標籤。甚至在XHTML2中,<img>都要被<object>取代。用<object>方法插入flash的程式碼是:
<object type="application/x-shockwave-flash" data="test.swf" width="200" height="100"> <parm name="movie" value="test.swf /> </object>
但是這個方法在IE5-IE6/Win上不能正確顯示(不能連續播放,要下載完才能放),在低版本的可以正確顯示。後來採用先調一個小flash檔再嵌入大flash檔的方法解決了連續播放的問題,但是在IE5以上版本有時依然出現不能顯示flash的情況。
3.目前的臨時辦法
那麼既要符合標準,又想在所有瀏覽器中正確顯示flash該怎麼做? macromedia網站是如何透過W3c校驗的?
有設計師想到了用JavaScript隱藏非法的<embed>標籤,
<script type="text/javascript "> if (navegiator . mimeTypes && navigator .
mimeTypes["application/x-shockwave-flash"] { document . write('<embed src="test . swf" ...
這是目前比較好的解決方法。你一定要插flash,就用js呼叫。這種方法可以欺騙W3C的校驗程序,使頁面通過校驗。但僅僅是"欺騙",而不是真符合標準。
macromedia是怎麼做的呢?看到這句程式碼:
<!-- $RCSfile: FlashDetection2k.pm,v $ $Revision: 1.68 $ : your browser's accept header indicates you have Flash 6,0,65,0 or better, so you're OK for this Flash 6 movie, here it comes. -->
它採用了一個折中二選一的辦法:
(1).首先javascript來判斷你的瀏覽器版本和flash player的版本;
(2).根據版本的不同在後台動態的產生HTML程式碼。
簡單說就是預設採用<object>方法,如果瀏覽器不能處理object的MIME類型「application/x-shockwave-flash」,它就插入子元素<embed>。說穿了,這和用js隱藏<embed>方法類似,也是一種「欺騙」的辦法,但這是目前能夠做到的最符合標準的,比較完美的做法了。
要真正拋棄<embed>,只能等IE瀏覽器對<object>更好的支援才行,也許要等到Longhorn出來了。