扩展右键菜单与自动替换旧 Flash 标签机制
扩展的核心工作流程
Ruffle 浏览器扩展启动后,对每个新页面做三件事:
第一步:DOM 扫描
等页面加载完,扩展遍历 <head> 和 <body>,寻找所有可能包含 Flash 内容的元素:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">(IE / 旧 Chrome 专用的 Flash object 标签)<embed type="application/x-shockwave-flash">(Netscape 系列的 embed 标签)<script type="text/javascript" src="...swfobject...">里生成的 Flash 元素- 动态通过
document.write()或innerHTML塞进页面的 Flash 标签
第二步:解析 SWF 地址
从这些元素的属性里提取出 .swf 文件的 URL(通常在 data、src 或 <param name="movie" value="..."> 里)。
第三步:替换
把原始 Flash 标签从 DOM 里彻底移除,换成 Ruffle 的 <div id="ruffle-player-xxx"> 容器,然后用 WebAssembly 运行时加载那个 SWF。
这就是为什么页面上的 Flash 能「悄悄变成 Ruffle」——不是叠加,是整块替换。原始 Flash Player 根本没机会跑起来,所以不存在安全漏洞风险。
右键菜单:Ruffle 自己加的
在被 Ruffle 接管的 Flash 画布上点右键,弹出的菜单里除了浏览器默认项之外,还多出几个 Ruffle 自己的条目:
- Enter Fullscreen:让 SWF 进入全屏(需要用户先点一下画布,符合浏览器自动播放策略)
- Rewind:回到动画开头(某些游戏不支持,但试了不会坏)
- 循环播放:切换循环播放状态
- 打开调试器:在扩展版本里,这个调试器功能有限(不如独立版全)
- 关于 Ruffle:版本号
如果扩展没识别出来怎么办
某些网站写 Flash 标签的方式特别绕,扩展识别不到。手动排查:
- F12 开发者工具 → Elements 面板 → 在搜索框里输
shockwave-flash或.swf,手动找到那个元素 - 看它的
src或data属性里是不是一个有效的 .swf URL - 如果是,把那个 URL 复制出来,手动在 Ruffle 独立版里打开——能跑就说明扩展没识别,去 GitHub Issue Tracker 报一个「特定网站的 Flash 标签 Ruffle 扩展没识别」的 issue,附上那个 HTML 片段
扩展 vs 网站嵌入脚本
两者都能让访客看到 Ruffle,但工作方式完全不同:
| 维度 | 浏览器扩展 | 网站嵌入 <script> |
|---|---|---|
| 谁控制 | 访客的浏览器 | 站长的服务器 |
| 访客要不要装 | 要 | 不要 |
| 能不能替换别的网站的 Flash | 能 | 不能,只能替换站长自己页面上的 |
| 自动更新 | 扩展商店自动更 | CDN / 自托管手动 |
| 对 CORS / HTTPS 的处理 | 浏览器层面自动适配 | 站长自己处理 |
如果你是网站站长,选「网站嵌入」那条路——让访客零配置直接用。如果你是访客,装扩展最省事。