一个用来运行"需要 Flash 插件的老页游"(例如攻城掠地等傲世堂系页游、4399 上的 Flash 小游戏)的 Windows 桌面壳。
本教程假设你零基础,没有装过 Node.js,也没写过代码,跟着一步步做即可。
2020 年底开始,主流浏览器(Chrome、Edge、Firefox...)全部移除了 Flash (PPAPI Flash)支持,所以这些老页游现在打不开了。
Chromium 87 是最后一个还支持 PPAPI Flash 插件的内核版本,而 Electron 11.5.0 正好是基于 Chromium 87 打包的最后一个 Electron 版本。
FlashBox 的做法就是:用 Electron 11.5.0 做一个"套壳浏览器",启动时通过命令行参数
把 Flash 插件(pepflashplayer.dll)注册进去,让游戏窗口表现得像 2020 年之前的
Chrome 一样,可以正常运行 Flash 内容。
package.json 里已经把 electron 锁定为 11.5.0,请不要手动升级它,
也不要听信任何"升级一下依赖"的建议。
前往 Node.js 官网 下载 LTS(长期支持)版本安装即可, 一路下一步。装好之后打开 PowerShell(在开始菜单搜索 "PowerShell"),输入:
node -v
npm -v能看到版本号(例如 v18.x.x)说明安装成功。
Node.js 的版本对本项目影响不大,它只是用来运行
npm install这些命令。 FlashBox 应用运行时用的是 Electron 11.5.0 自带的运行环境,和你电脑装的 Node.js 版本没有关系。
由于 pepflashplayer.dll(Flash 播放器插件)版权归 Adobe 所有,本项目不会
打包分发这个文件,也不提供具体的第三方下载直链,需要你自行搜索获取,并自行
判断来源是否可信、是否合法。可以作为搜索关键词参考的方向(请自行甄别来源,
风险自负):
- 搜索 "clean flash builds" / "CleanFlash":社区维护的、不带 Adobe 全家桶的
Flash 播放器构建项目,通常以 GitHub Releases 的形式分发
.7z压缩包,里面有 32/64 位的 Chrome(PPAPI) / Firefox(NPAPI) / IE(ActiveX) 等多个插件文件,需要 找到 64 位、PPAPI(给 Chrome 用的那种) 的那个.dll。 - 搜索 "flash.cn" 大力智能 Flash:国内的 Flash 存档站点,也提供 PPAPI 版本的 Flash 播放器下载。
拿到 dll 文件后:
-
把它改名为
pepflashplayer.dll(如果原文件名不同的话)。 -
放到本项目的
plugins目录下,最终结构应该长这样:flashbox/ plugins/ pepflashplayer.dll <-- 就是这个文件 main.js ... -
⚠️ 小心 Windows 隐藏扩展名的坑:Windows 默认不显示文件后缀名,如果你在 重命名时把pepflashplayer改成了pepflashplayer.dll,而文件本身其实已经 带了.dll后缀,就会变成pepflashplayer.dll.dll,导致程序找不到插件。 建议先在文件资源管理器里,点"查看" -> 勾选"文件扩展名",把隐藏的后缀显示出来, 确认最终文件名精确是pepflashplayer.dll,不多不少。
如果暂时没有 dll 也没关系,FlashBox 启动时会自动检测,缺失的话会在界面上用红色 提示框显著提醒你,不影响你先把软件跑起来看看界面。
推荐版本号是 34.0.0.308(这是 Flash 停更前的最后一个正式版本号),如果你
用的 dll 版本号不同,需要同步修改 lib/flashLocator.js 里的 FLASH_VERSION
常量,否则 Chromium 有可能因为版本号对不上而拒绝加载插件。
由于 Electron 的安装包体积较大且服务器在国外,直接 npm install 在国内网络下
大概率会下载超时/失败。请先配置国内镜像,再安装依赖。
在项目根目录下打开 PowerShell,依次执行:
# 1. npm 包本身走 npmmirror 镜像
npm config set registry https://registry.npmmirror.com
# 2. Electron 的预编译二进制走 npmmirror 的 Electron 镜像
npm config set electron_mirror https://npmmirror.com/mirrors/electron/如果你不想永久修改 npm 全局配置,也可以只在当前这一次命令里临时设置环境变量:
$env:ELECTRON_MIRROR = "https://npmmirror.com/mirrors/electron/"然后再执行下面的
npm install。
配置好之后,执行安装:
npm install看到类似 added xxx packages 且没有报错,就说明依赖装好了。
npm start正常情况下会弹出 FlashBox 启动器窗口,里面预置了一个默认入口:
- 4399 小游戏 -
https://www.4399.com/
点击卡片上的"启动"按钮,会新开一个窗口加载对应网址。窗口大小默认会自动按 网页实际内容大小锁定(没有浏览器地址栏,窗口大小固定、不能手动拖拽调整), 尽量做到刚好贴合游戏画面、没有滚动条也没有大片留白。如果游戏弹出了充值 / 公告等新窗口,新窗口同样会用这种"锁定大小"的方式打开。
游戏窗口里随时可以按 F11 切换到没有任何窗口边框的真全屏模式(老页游大多是 固定分辨率设计的,全屏后如果画面没占满整个屏幕、周围有黑边是正常的,因为页面 本身没有做到全屏自适应),再按一次 F11 切回锁定大小的窗口模式。
你也可以在顶部的"添加游戏"表单里填写名称和网址(需以 http:// 或 https://
开头),添加自己的游戏入口;点击游戏卡片上的"编辑"可以修改名称/网址,点"删除"
可以移除不需要的入口。所有游戏数据会自动保存在:
%APPDATA%\FlashBox\games.json
下次打开 FlashBox 会自动读取,不需要重新添加。
不同网站的页面结构千差万别,FlashBox 没办法(也不应该)针对某个具体网站写死 "自动隐藏顶部导航栏"这种逻辑,而是提供了一个通用的"按 CSS 选择器隐藏元素"功能, 需要你自己动手指认一下要隐藏的是哪个元素:
- 启动这个游戏,游戏窗口里按 F12 打开开发者工具。
- 用开发者工具左上角的"选择元素"箭头(或
Ctrl+Shift+C),点一下你想隐藏的 那块区域(比如顶部导航栏)。 - 在右侧高亮的 HTML 上右键 -> 复制 -> 复制选择器(Copy selector),或者直接
看它的
class/id自己写一个选择器,比如.top-nav或#header。 - 回到 FlashBox 启动器,点这个游戏卡片上的"编辑",把选择器粘贴到"要隐藏的 元素 CSS 选择器"这一栏(可以填多个,用逗号分开),保存后重新启动这个游戏 就生效了。
这个功能对所有游戏通用,不是针对某个网站的特殊处理,写错了选择器也不会导致 其他游戏或 FlashBox 本身出问题,大不了这个游戏页面没有元素被隐藏而已。
开发调试没问题之后,执行:
npm run dist同样建议先按第 3 步配置好 electron_mirror,因为 electron-builder 打包时
也需要下载 Electron 对应版本的运行时。如果打包过程中卡在下载
electron-builder 自身依赖的二进制文件(比如代码签名工具)超时,可以再加一条:
npm config set ELECTRON_BUILDER_BINARIES_MIRROR https://npmmirror.com/mirrors/electron-builder-binaries/打包完成后,在 dist 目录下会生成一个类似
FlashBox-1.0.0-portable.exe 的单文件绿色版程序,双击即可运行,不需要安装。
plugins 目录会通过 extraResources 配置自动打包进 exe 旁边的资源目录里
(程序运行时会自动从正确的位置查找 dll),所以打包前请确保 plugins 目录下
已经放好了 pepflashplayer.dll。
Q: 界面提示"未检测到 Flash 插件文件"?
按第 2 步把 pepflashplayer.dll 放到 plugins 目录下(开发模式)或者
exe 所在目录的 resources\plugins 下(打包之后),然后重启 FlashBox。
Q: 已经放了 dll,但游戏页面里 Flash 还是白屏 / 转圈圈?
- 确认文件名精确是
pepflashplayer.dll,没有变成pepflashplayer.dll.dll(见第 2 步的隐藏扩展名说明)。 - 确认 dll 版本号和
lib/flashLocator.js里的FLASH_VERSION(默认34.0.0.308)一致。 - 有些老页游是
http://开头的(非 https),本项目已经加了allow-running-insecure-content命令行开关来允许这种情况,一般不需要额外处理。 - 部分安全软件 / 组策略较严格的系统上,Flash 子进程可能因为沙箱限制起不来,
本项目已经默认加了
no-sandbox开关;如果还是不行,可以尝试用管理员权限 运行 FlashBox。
Q: 打包出来的 exe / 或者 plugins 里的 dll 被杀毒软件报毒 / 报木马,怎么办?
这是误报,原因主要有两个:
electron-builder打包出的免安装单文件 exe,本质上是把一堆资源和 Node.js 运行时打包压缩进一个可执行文件,这种"自解压/自加载"的行为模式和一些木马、 捆绑软件的行为特征相似,容易被启发式查杀误伤,是 Electron 打包程序的通病, 和代码本身是否安全无关。pepflashplayer.dll是一个已经停止更新多年的浏览器插件,而 Flash 历史上 出现过大量真实漏洞,杀毒软件的特征库里往往把"Flash 播放器插件"这一类文件 直接标记为高风险/过时组件,属于"一刀切"的策略性拦截,不代表你下载到的这个 具体文件真的带毒。
建议:
- 仅从可信来源(如上文提到的 Clean Flash 社区版、flash.cn)获取 dll,不要 随便从来路不明的网盘/论坛下载。
- 如果本地杀毒软件删除了 dll 或拦截了 exe 运行,把 FlashBox 所在目录添加到 杀毒软件的信任 / 白名单目录即可。
- 只在自己完全掌控的电脑上使用,不建议分发未经他人核实的打包产物给不了解 原理的人,避免被误解为传播木马。
Q: 可以用更高版本的 Electron 吗?体验/性能/安全性是不是更好?
不可以。Electron 12 开始彻底移除了 PPAPI Flash 支持,升级 Electron 等于让
Flash 游戏彻底无法运行,这是本项目存在的意义所在。请不要升级 electron 依赖
版本,也不要升级 Chromium 内核相关的任何依赖。
本项目仅供个人怀旧、学习技术原理之用,采用 MIT 协议 开源,代码
按"现状"提供,不附带任何明示或暗示的担保。Flash 已经停止官方支持并存在已知
安全风险(本项目默认开启了 no-sandbox),请自行评估运行来源不明网页游戏的
风险,不要在其中输入敏感信息(如支付密码)。
pepflashplayer.dll 版权归 Adobe 所有,本项目不提供、不分发该文件,也不提供
具体的第三方下载直链,仅提供加载它的技术方案;获取该文件的合法性、来源是否
可信,均由使用者自行判断和承担。通过本项目加载的任何第三方网页/游戏内容的
版权与合规性,同样由使用者自行负责,与本项目及其贡献者无关。
flashbox/
main.js # 主进程:注册 Flash 启动参数、窗口管理、IPC
preload.js # contextBridge 白名单接口,渲染进程通过它调用主进程能力
lib/
flashLocator.js # 定位 / 检测 Flash 插件 dll
gameStore.js # 游戏列表的持久化(games.json)
renderer/
index.html
index.js # 启动器界面逻辑
style.css
plugins/
pepflashplayer.dll # 需要你自行放入(见第 2 步)
package.json