【转】HTML - embed 与 object 之争
在 HTML 里嵌入文本和圖片之外的事物,就會用到嵌入標簽,而嵌入標簽在各瀏覽器之間的不統一,一直是讓開發人員很頭痛的問題。一切都要從嵌入 SUN 公司的 Applet Java 小程序開始。
當時,對于 Applet 的嵌入,瀏覽器老大哥 Netscape 公司是使用 embed 標簽的,embed 標簽的好處就是嵌入一個對象只需要一對標簽,所有參數都寫入該標簽的屬性,非常方便。而微軟和其他瀏覽器廠商都使用 applet 專用標簽,主標簽只有幾個固定的屬性,那些和嵌入內容有關的屬性都放在子標簽 param 里(param 只有 name、value 這類固定屬性),這種組合標簽,就是 object 標簽的前身。
之后,隨著 Flash、視頻、音頻這些多媒體元素在網站上的出現,embed 標簽的功能被擴展了,用于嵌入這些多媒體元素——原先 embed 標簽就有一個 type 屬性,利用 MIME 分辨嵌入內容的類型——這是一個非常好的功能,使得非 Applet 的內容也能被識別,而且 MIME 的法則本身就不受瀏覽器和操作系統的限制。
此時的微軟,正在 ActiveX 技術普及的時期,applet 這種標簽名范圍太窄,于是就大力推行泛用的 object 標簽,專門用于 ActiveX 控件的嵌入。object 標簽幾乎和 applet 一樣,只是多了 clsid、codetype 等屬性,主要用來來判別嵌入內容的類型。ActiveX 是一把雙刃劍,雖然極易開發和使用,但是卻是 Windows Only 的技術;而且連 Firefox 的 Windows 版都不支持它,所以在瀏覽器行業 ActiveX 簡直是 IE Only…… 于是各大瀏覽器廠商都倒向以往被冷落的 embed,只是……被 W3C 認可的是 object,而不是?embed,因為 embed 的屬性是根據嵌入內容類型的不同而不同的(實質上是針對“嵌入內容解讀插件”而寫的屬性),無法定死,對于標準來說這就是硬傷。
下 面,我針對 embed 與 object 標簽在 IE6 和 FF3 for Windows 之間做了對比測試。方法是,嵌入了一個 Flash(swf 文件,MIME 為 application/x-shockwave-flash)和一個音頻(mp3 文件,MIME 為 audio/mpeg),分別寫成四種形式的 HTML 給兩個瀏覽器瀏覽:
1,兩個嵌入都使用 embed;
2,兩個嵌入都使用 object(只靠 clsid 識別);
3,兩個嵌入都使用 object(同時使用 clsid?與 codetype 識別);
4,兩個嵌入都使用 object(只靠 codetype 識別)。
IE6 的結果為:
1——兩個嵌入都正常(mp3 默認是 WMP 的 ActiveX 控件打開;若 QuickTime?ActiveX 控件注冊了mp3 的 MIME,則由 QuickTime ActiveX 控件打開,且可能有安全警告);
2——兩個嵌入都正常(clsid 填寫哪個 ActiveX 控件的,就用哪個打開);
3——兩個嵌入都正常(clsid 填寫哪個 ActiveX 控件的,就用哪個打開);
4——Flash 嵌入正常,mp3 音頻嵌入失敗(顯示成一個無法輸入的文本框)。
FF3 的結果為:
1——兩個嵌入都正常(mp3 默認無法打開,除非 type 屬性改用 WMP 專用?MIME;若 QuickTime?插件注冊了mp3 的 MIME,則由 QuickTime 插件打開);
2——兩個嵌入都失敗(空白);
3——兩個嵌入都失敗(空白);
4——兩個嵌入都失敗(空白)。
測試結果是:embed 標簽兼容性較強,但是變數太多,對于小白瀏覽者來說就是噩夢;而 object 標簽果然是 IE Only。所以當年被 Macromedia 公司所提倡的 object-embed 混合寫法是最安全的,雖然不符合 W3C 標準。
另針對 Windows Media Player ActiveX 控件。在 IE(包括馬甲)第一次在網頁上讀到含有媒體裝載的 embed 或 object 元素時,會給 IE 注冊相應的加載項,雖然注冊的名稱不同,但是文件都指向 wmp.dll 或 wmpdxm.dll。含有有效 clsid 的?object 元素將注冊名稱為 Windows Media Player 的加載項;embed 元素則會根據文件 MIME 注冊成對應名稱的加載項(比如 wma 文件會注冊 AUDIO__X_MS_WMA Moniker Class,wmv 文件會注冊 VIDEO__X_MS_WMV Moniker Class,實際上這些 class 是原本就存在的,只是需要創建 MIME - CLSID 關聯并鏈入 iexplore)。當禁用已經生成的加載項,或者加載項注冊表被破壞時,其對應的 HTML 標簽將失去作用。
?
from:http://my.oschina.net/u/941420/blog/227545
總結
以上是生活随笔為你收集整理的【转】HTML - embed 与 object 之争的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode答案集锦
- 下一篇: 关于使用npm下载资源包的一些常用命令