object标签src必须为完整URL(如https://或http://),/assets/或file.pdf属相对路径;file://协议被现代浏览器禁止,本地调试须用HTTP服务;type属性不可省略且须匹配MIME类型,fallback内容需置于标签体内。

object 标签引用绝对路径资源时,src 属性必须是完整 URL
直接写 src="/assets/file.pdf" 或 src="file.pdf" 是相对路径,不是绝对路径。真正“绝对路径”在 HTML 中指以 http://、https://、file:// 开头的完整地址。浏览器对 file:// 协议有严格限制,本地双击打开 HTML 文件时,多数现代浏览器(Chrome/Firefox/Edge)会直接拒绝加载 object 中的 file:// 资源,并静默失败或报 net::ERR_BLOCKED_BY_CLIENT 类错误。
可行做法只有两种:
- 用
https://或http://开头的公网或局域网可访问地址,例如src="https://example.com/docs/report.pdf" - 若资源在同域下,用协议相对 URL(如
src="//cdn.example.com/video.mp4"),但前提是页面本身也通过 HTTP(S) 加载 - 本地开发调试时,必须起一个本地 HTTP 服务(如
python3 -m http.server 8000),然后用http://localhost:8000/assets/chart.svg—— 直接双击 HTML 文件永远不 work
object 的 type 属性不能省略,否则浏览器无法选择正确插件或内置处理器
比如嵌入 PDF,仅写 <object src="https://a.com/doc.pdf"></object> 在部分浏览器中可能显示为空白或 fallback 内容。必须显式声明 type="application/pdf",让浏览器知道该调用 PDF 查看器(内置或扩展)。
常见 type 值参考:
立即学习“前端免费学习笔记(深入)”;
- PDF:
type="application/pdf" - SVG:
type="image/svg+xml" - MP4 视频:
type="video/mp4" - Flash(已废弃,仅作说明):
type="application/x-shockwave-flash"
注意:type 值必须与实际资源 MIME 类型一致,否则某些浏览器(尤其是 Safari)会拒绝加载。
object 加载失败时,fallback 内容要放在开始和结束标签之间
object 标签的容错机制依赖其标签体内容 —— 浏览器加载失败或不支持对应 type 时,会渲染标签内的 HTML。这不是靠 alt 或属性控制的。
正确写法示例:
<object data="https://example.com/map.svg" type="image/svg+xml" width="600" height="400"> <p>您的浏览器不支持 SVG,<a href="https://example.com/map.svg">请下载查看</a>。</p> </object>
常见错误:
- 把提示文字写在
object外面(不会作为 fallback) - 只写空标签
<object ... />(XML 风格自闭合,在 HTML 中无效,且无 fallback) - 在
object内放img标签却不加src,指望它自动降级(不会自动触发)
跨域资源需服务端配 CORS,否则 object 可能加载但无法脚本交互
即使 object 成功显示了一个跨域 PDF 或 SVG,JavaScript 仍大概率无法访问其内部文档(如 contentDocument)。浏览器会抛出 Blocked a frame with origin ... from accessing a cross-origin frame 错误。
原因:object 创建的是一个嵌入的 browsing context,受同源策略约束。解决办法只有:
- 目标资源服务器响应头包含
Access-Control-Allow-Origin: *(或指定域名) - 资源与页面同源(最简单可靠)
- 放弃 JS 访问内部 DOM,只作静态展示
特别提醒:CORS 头对 object 是否“显示成功”无影响 —— 显示靠浏览器渲染引擎,而脚本访问才走 CORS 检查。这点容易被忽略,导致调试时误以为加载失败。



















