object兼容IE旧版(依赖classid/codebase),embed兼容现代浏览器(依赖type/pluginspage);推荐嵌套写法:object包裹embed,并用param传参,避免单独使用任一标签。

object 和 embed 的浏览器兼容性差异
IE(尤其是旧版)只认 object,靠 classid 和 codebase 加载 ActiveX 控件;而 Firefox、Chrome、Safari 等基于 Netscape 插件模型的浏览器只识别 embed,依赖 type(如 application/x-shockwave-flash)或 pluginspage 定位插件。这意味着单独写一个标签,大概率在某类浏览器里直接不渲染。
常见错误现象:object 在 Chrome 里空白,embed 在 IE11(兼容模式)下报“未注册对象”。
- 不要只用
embed:IE 会忽略它,Flash 或 PDF 嵌入直接失效 - 不要只用
object:现代浏览器(尤其 Chromium 内核)对object的插件支持已大幅削弱,且不触发embed子内容 - 推荐写法:把
embed作为object的子元素,让 IE 忽略内部embed,其他浏览器则 fallback 到它
object 支持参数传递,embed 几乎不支持
object 可配合 <param> 标签传参,比如控制 Flash 的 movie、quality、wmode;而 embed 的所有配置都得塞进属性里(如 flashvars、allowscriptaccess),且没有统一规范,不同插件解释方式不一致。
使用场景:嵌入旧版交互式 PDF 或带 JS 通信的 Flash 组件时,object 是唯一能可靠传参的方式。
立即学习“前端免费学习笔记(深入)”;
-
param名称必须拼写准确(如name="wmode",不是wMode),否则被静默忽略 -
embed的等效属性(如wmode="transparent")在部分浏览器中可能被无视,尤其当与object混用时 - HTML5 中
param已无实际作用,但旧系统仍依赖它 —— 别删,除非确认目标环境完全不用插件
HTML5 语境下 embed 已被弃用,object 也仅限特定用途
W3C 明确将 embed 标记为“遗留标签”,不鼓励新项目使用;object 虽未废弃,但它的核心用途(加载插件)在现代浏览器中基本被禁用(Flash 全面淘汰、NPAPI 插件停用、PDF 渲染由浏览器内置处理)。
性能与兼容性影响:强行用 object 加载本地 PDF,在 Safari 上可能触发下载而非内联预览;在 Chrome 里若 MIME 类型写错(如 type="application/pdf" 漏了 data 属性),会显示空白框而非错误提示。
- 嵌视频/音频优先用
<video>或<audio>,不是object或embed - 嵌 PDF 推荐用
<iframe src="xxx.pdf">,兼容性好、沙箱安全、无需插件 - 真要兼容极老系统(如 Windows XP + IE6),才需保留
object+embed套娃结构,否则纯属增加维护成本
容易被忽略的 MIME 类型和 data 属性依赖关系
object 是否能加载资源,不只看 type,更关键的是 data 属性是否指向有效 URL,且服务器返回的响应头 Content-Type 必须与 type 严格匹配。例如:type="application/pdf" 但服务端返回 text/plain,Chrome 就会拒绝渲染。
常见错误现象:PDF 文件路径正确,但页面只显示一个空灰框;DevTools Network 面板里该请求状态码是 200,但 Response Headers 缺少 Content-Type 或值不对。
- 静态文件服务器(如 nginx)需显式配置 PDF 的 MIME 类型:
application/pdf -
embed对type更宽松,但现代浏览器往往直接忽略它 —— 别指望靠它绕过object的类型校验 - 本地开发时用
file://协议打开 HTML,object加载 PDF 极易失败(跨源限制+MIME 推断失效),务必走 HTTP 服务测试
object 和 embed 的存在感已经非常低。真正需要它们的时刻,往往意味着你在维护一个没法升级的旧系统,或者对接某个强制要求 ActiveX 的政府/银行内网组件 —— 这时候,细节比语法更重要。


















