【转】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 之争的更多相关文章
- html5新媒体播放器标签video、audio 与embed、object
html5里的一些新的标签,看到里面object.embed.video.audio都可以添加视频或音频文件 embed是针对非IE的浏览器的媒体播放器 video是html5出的一种新标准,但并不是 ...
- html5 嵌入元素 img map areaiframe embed meter object meter
<img src="路径"> src 路径可以是img.jpg 也可以是 绝对和相对路径+img.jpg <img src="路径 ...
- <frame>、<iframe>、<embed>、<object> 和 <applet>
frame frame 必须在 frameset 里,而 frameset 又不能和 body 共存(就是一旦存在 frame,就不能存在 body 了,因此这个基本每人使用) 推荐阅读:https: ...
- object标签和embed标签
概述 html中有许多用于嵌入各种类型内容的标签,包括:embed,audio,canvas,iframe,img,math,object,svg和video.之前我在很多地方都看到了object标签 ...
- [HTML/CSS]div显示在object、embed之上~
引言 帮一个朋友弄前端布局,一切都正常,但是嵌入object之后,div总是在object的下面,就上网找了一下解决方案,这里记录一下,好像只对flash有效. 用embed插入一个flash(比如优 ...
- HTML的<object>标签 (转)
object标签用于定义一个嵌入的对象,包括:图像.音频.Java applets.ActiveX.PDF以及Flash.该标签允许您规定插入HTML文档中的对象的数据和参数,以及可用来显示和操作数据 ...
- object 插入元素,插入HTML页面
object标签用于定义一个嵌入的对象,包括:图像.音频.Java applets.ActiveX.PDF以及Flash.该标签允许您规定插入HTML文档中的对象的数据和参数,以及可用来显示和操作数据 ...
- 在页面加载后在设置embed 的src 怎么实现?
我想在页面加载完之后,再给embed 加入src 值,但embed 后播放不了.下面是我的两个方案,都无法播放,求解: <script type="text/javascript&qu ...
- 【XSS】利用 onload 事件监控流量劫持
说到跨站资源监控,首先会联想到『Content Security Policy』.既然 CSP 好用,我们何必自己再搞一套呢.那就先来吐槽下 CSP 的缺陷. 目前的 CSP 日志不详细 用过 CSP ...
随机推荐
- PHP实现简单计算器
<!--简单的计算器--> <!DOCTYPE html> <html> <head> <title>PHP实现简单计算器</titl ...
- Palindrome Number ---- LeetCode 009
Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...
- HDU-4255 BFS 最短路
题意:蛇形填数,然后素数处是障碍,给你起点终点,求步数: 思路:其实就是bfs,关键是将数字转换成位置比较难: bfs其实比较简单,就是固定的思路,固定的步骤: 模板: ][] = {{-, }, { ...
- Android Studio调试功能使用总结
先编译好要调试的程序 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指向 ...
- React Native 组件之TextInput
React Native 组件之TextInput类似于iOS中的UITextView或者UITextField,是作为一个文字输入的组件,下面的TextInput的用法和相关属性. /** * Sa ...
- 转:SSL协议详解
http://kb.cnblogs.com/page/162080/ 背景介绍 最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SS ...
- Qt之动画框架
简述 Qt动画框架旨在为创建动画和平滑的GUI提供了一种简单的方法.通过Qt动画属性,该框架为部件和其它QObject对象的动画操作提供了非常大的自由性,框架也可以被用于图形视图框架中,动画框架中许多 ...
- ABAP 使用的字符类型
1.ABAP基本数据类型 类型 描述 属性 C 字符类型 默认长度1,最大长度不限N 数字类 ...
- c 深度剖析 3
1 typedef 和 define 的区别 #define是简单的替换; typedef是别名! 1 2 #define pchar char * pchar a,b;//展开后 char * ...
- SimPholders2 模拟器 App 文件路径查看工具
SimPholder2.app 官网下载地址:http://www.simpholders.com 当使用 Xcode beta 版本切换到 Xcode 正式版本时,点击 SimPholders2. ...