备用文本仅在data资源404、超时、不支持type MIME类型、type与Content-Type不匹配或用户阻止加载时显示;需写在<object>标签内真实子节点中,type属性必须明确指定且影响fallback触发时机。

直接在 <object> 标签内部写内容,就是备用文本;不需要 JS、不依赖属性,浏览器原生支持,但必须满足结构和触发条件。
备用文本什么时候会显示
浏览器只在以下任一情况发生时,才渲染 <object> 标签内的子内容(即备用文本):
-
data指向的资源返回 404、网络超时或被拦截 - 浏览器不支持
type声明的 MIME 类型(如type="application/x-shockwave-flash"但 Flash 已禁用) -
type与实际响应头中的Content-Type不匹配(例如服务器返回text/plain,但你写了type="text/html") - 资源加载被用户手动阻止(如弹出拦截、插件禁用弹窗)
注意:如果 data 属性缺失或为空字符串,多数浏览器也会直接 fallback —— 但这属于非标准行为,不应依赖。
正确写法:结构不能省略结束标签
备用内容必须是 <object> 开始与结束标签之间的**真实子节点**,不能只是注释、空格或隐藏元素。常见错误写法包括:
立即学习“前端免费学习笔记(深入)”;
- 漏写
</object>—— 导致整个备用内容被忽略 - 只写
<object data="a.html"><!-- fallback --></object>—— 注释不参与渲染 - 用
display: none包裹备用内容 —— 浏览器不会“发现”它
推荐结构示例:
<object data="sidebar.html" type="text/html" width="300" height="200"> <p>侧边栏加载失败,请<a href="sidebar.html">手动打开</a>。</p> <img src="fallback-sidebar.png" alt="侧边栏示意"> </object>
type 属性不是可选的,它影响 fallback 触发时机
type 不仅是语义说明,更是浏览器判断“是否支持该资源”的第一依据。省略 type 时,浏览器可能跳过类型检查,延迟 fallback,甚至尝试默认解析(比如把 HTML 当二进制载入)。
- 嵌入 HTML 文件:必须写
type="text/html" - 嵌入 PDF:写
type="application/pdf",否则 Chrome 可能拒绝渲染 - 嵌入 SVG(内联):写
type="image/svg+xml",避免被当成普通 XML 解析失败
即使你知道文件后缀是 .pdf,也别指望浏览器自动推断 MIME 类型 —— 它只看响应头和你写的 type。
不要在 object 里放 script 标签当 fallback
虽然语法上允许在 <object> 内写 <script>,但绝大多数浏览器在 fallback 阶段会忽略其中的 JS 执行。这不是 bug,而是规范行为:备用内容仅用于呈现,不激活执行上下文。
- 想做加载状态提示?用
onerror事件 + 外部 JS 控制容器 DOM - 想补全功能?把逻辑写在主页面,而不是塞进
<object>的备用区 - 需要动态降级?优先用
<iframe>+ CSS:not(:loaded)(有限支持)或 fetch + innerHTML 方案
真正容易被忽略的一点:备用内容的样式继承自主页面,但它处于一个独立的子文档上下文(尤其在嵌入 HTML 时),CSS 选择器作用域可能意外失效 —— 测试时务必用真实失败场景验证视觉表现。



















