flash已全平台停用,嵌套flash不会加载、不报错、不触发onerror,所谓“降级”必须靠js主动检测,不能依赖原生fallback。

Flash 已全平台停用,<object></object> 嵌套 Flash 不会加载、不报错、不触发 onerror,所谓“降级”必须靠 JS 主动检测,不能依赖原生 fallback。
为什么 <object data="xxx.swf"></object> 什么也不显示还无提示
Chrome 88+、Firefox 85+、Edge 14+、Safari 14+ 已彻底移除 NPAPI 插件接口,浏览器连尝试加载都不做。你写的 type="application/x-shockwave-flash" 会被直接忽略,<param> 全部失效,控制台最多只有一条 Failed to load resource,且不触发 onerror 事件。
- IE11 是唯一可能工作的环境,但需启用兼容性视图 + 正确
classid+ ActiveX 允许 -
<object></object>内部的<p></p>或<img>不会自动显示——因为资源“没失败”,而是“被跳过” - 移动端(iOS/Android)从无 Flash 支持,嵌套写法在微信 X5、QQ 浏览器里纯留白
真正能触发 fallback 的只有两种情况
原生 <object></object> 的 fallback 只在以下情形生效:服务端返回 404,或响应头 Content-Type 与 type 属性严重不匹配(比如写成 text/pdf)。Flash 场景中这两者几乎不会发生——URL 存在,MIME 类型也“被识别”,只是插件宿主不存在。
-
data指向一个真实存在的 .swf 文件 → 浏览器静默丢弃,fallback 不触发 -
type写错(如application/x-flash)→ Firefox/Safari 可能触发 fallback,Chrome 不一定 - 想靠
<param name="movie">传参再 fallback?参数根本没机会传递,插件实例为 null
可行的降级路径:JS 检测 + 手动注入替代内容
别等 <object></object> 自己降级,要主动判断 Flash 是否可用,再决定渲染什么。现代方案不是“兜底”,而是“替代”。
- 用
navigator.plugins或typeof ActiveXObject === 'function'判断环境(仅 IE11 有效) - 更可靠的做法:直接假设 Flash 不可用,用
<video></video>、<canvas></canvas>或静态图替代,把 SWF 转成 HTML5 动画或 Lottie - 若必须保留旧 SWF 链接,fallback 内容应是
@#@#@#@#@#@#@#@#@#@0,而非“请安装 Flash”——用户装不了 - 不要在
<object></object>标签内写<script></script>,它不会执行;要用外部 JS 在 DOM 加载后动态替换节点
<object></object> + <embed></embed> 嵌套写法现在完全无效
这种曾用于兼容 IE 和 Firefox 的写法,如今所有主流浏览器都已放弃解析逻辑。Chrome/Edge 直接忽略整个 <object></object> 块;Safari 可能解析 <embed></embed> 但因无插件支持而静默失败。
-
<object><embed src="x.swf"></embed></object>中的<embed></embed>不是 fallback,它和<object></object>一样被跳过 -
pluginspage属性(指向 Adobe Flash 下载页)已失效,链接 404,且现代浏览器禁止跳转到该域名 - 如果你还在维护老系统,降级重点不是“让 Flash 工作”,而是“让用户知道它不能工作,并提供可用替代”
真正容易被忽略的点:fallback 文本写得再好,也救不了一个被浏览器主动绕过的 <object></object>。降级不是 HTML 标签的事,是架构选择的事——SWF 内容必须有对应 HTML5 实现,否则用户看到的就是空白。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











