标签跨域加载无cors检查,失败主因是服务端content-type错误(如非application/pdf)、路径错误或mime未配置;pdf需严格匹配type属性与响应头,否则静默白屏,fallback不可靠,推荐改用。

object标签跨域加载根本不存在“跨域问题”
浏览器对 <object></object> 标签不执行 CORS 检查——它既不发 OPTIONS 预检,也不校验 Access-Control-Allow-Origin。所谓“跨域失败”,99% 是服务端响应头错、路径错或 MIME 类型不匹配导致的静默 fallback 或白屏,不是 CORS 拦截。
PDF 加载失败时,先检查服务端 Content-Type
现代浏览器只把 <object></object> 当作 PDF 嵌入通道,且严格依赖服务端返回的 Content-Type: application/pdf:
- 若服务器返回
text/plain、application/octet-stream或 HTML(比如 404 页面),浏览器会直接跳过渲染,显示 fallback 内容(如果写对了) - Nginx/Apache 未配置
.pdf的 MIME 类型,就会默认返回application/octet-stream;需在配置中显式添加application/pdf pdf - 本地开发用
file://协议时,Firefox 会忽略type,只认文件后缀;Chrome 直接拒绝加载 —— 必须用npx http-server启 HTTP 服务预览 - 加
typemustmatch属性可强制校验:若响应头与type="application/pdf"不一致,连 fallback 都不触发,直接留白
data 路径错误不会触发 fallback,只会静默白屏
<object></object> 的 fallback 机制非常脆弱,仅在两种情况下生效:
- HTTP 请求失败(404 / 500 / 断网)
- 响应头
Content-Type与type值不匹配
但以下情况完全不触发 fallback:
-
data="./docs/report.pdf"实际路径是/static/files/report.pdf→ 请求发出去了,但返回 404 HTML 页面,因type="application/pdf"与响应头text/html不匹配,浏览器直接放弃渲染,也不显示内部<p></p> -
data指向跨域 PDF(如https://cdn.example.com/doc.pdf),服务端没配 CORS → 仍能加载(因为<object></object>不走 CORS),但后续 JS 尝试读取内容会失败(contentDocument为null或报SecurityError)
移动端 fallback 几乎不可靠,别依赖它
iOS Safari、微信内置浏览器、QQ 浏览器等对 <object type="application/pdf"></object> 的处理逻辑已转向“交由系统应用打开”,导致:
- fallback 内容(如
<p>请下载</p>)基本不显示 - 即使删掉
type属性,也大概率降级为下载链接,而非渲染 fallback -
onerror事件在移动端几乎从不触发,无法用 JS 捕获失败
真正可控的替代方案是 <iframe src="doc.pdf"></iframe>:它不依赖 type,不触发插件协商流程,iOS 15+ 和主流安卓 WebView 均支持内嵌渲染和手势缩放。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











