不能,object标签的data属性无法动态加载多媒体;浏览器仅在元素首次插入dom时读取data值,后续修改无效,必须销毁旧元素并重建新object节点才能实现重载。

object 标签的 data 属性无法响应式更新——改完就走,浏览器根本不理。想换资源?不是“刷新属性”,是“换人”。
为什么直接改 data 没用
现代浏览器(Chrome/Firefox/Safari/Edge)只在 object 元素**首次插入 DOM 时**读取一次 data 值。后续任何 JavaScript 修改(比如 el.data = 'new.pdf' 或 el.setAttribute('data', 'new.pdf'))都不会触发重新加载、不发请求、不触发 load 或 error 事件,页面内容静默卡死。
常见错误现象:
- 点击按钮后 PDF 页面没变,控制台也无报错
- 用 DevTools 手动改 DOM 中的
data属性,预览区毫无反应 - 旧资源还在显示,新
data值已写入,但完全被忽略
安全替换 object 的实操步骤
必须销毁旧节点,新建一个完整配置的 object 替换上去。关键不是“改”,是“重建”。
- 用
document.createElement('object')创建全新节点 - 显式设置所有必要属性:
data、type、width、height - 如果原
object含<param>子元素(如旧系统中传参用),必须手动cloneNode(true)并追加到新节点 - 用
parentNode.replaceChild(newObj, oldObj)完成替换;避免用innerHTML清空再写,会丢失事件绑定或状态 - 为防闪屏,可先设
newObj.style.display = 'none',监听load事件后再display = 'block'
data 地址写错时 fallback 为何不显示
很多人以为路径错了 fallback 就该出来,结果只看到白屏——这是因为 fallback **只在 HTTP 请求发出且失败时才激活**,而路径非法(如 data=""、data=" "、data="javascript:void(0)")会导致浏览器压根不发起请求,直接跳过整个加载流程。
真正能触发 fallback 的典型场景:
-
data="missing.pdf"→ 发起请求,返回 404 → fallback 显示 - 服务器返回 PDF 文件但
Content-Type: text/plain→ 浏览器识别为不可渲染 → fallback 显示 - 用户禁用了内置 PDF 查看器 → 资源加载成功但无法处理 → fallback 显示
容易被忽略的细节:相对路径必须相对于当前 HTML 文档 URL 解析,data="pdf/report.pdf" 和 data="./pdf/report.pdf" 在某些构建工具或服务端路由下行为可能不同;本地开发务必用 http-server 启服务,别用 file:// 协议测试。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











