Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FlashBox

一个用来运行"需要 Flash 插件的老页游"(例如攻城掠地等傲世堂系页游、4399 上的 Flash 小游戏)的 Windows 桌面壳。

本教程假设你零基础,没有装过 Node.js,也没写过代码,跟着一步步做即可。


0. 原理是什么?为什么现在的浏览器都打不开这些游戏了

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 内容。

⚠️ 非常重要:Electron 版本必须锁死在 11.5.0,绝对不能升级。 从 Electron 12 开始,Flash 支持被官方彻底移除,升级依赖 = Flash 直接失效。 本项目 package.json 里已经把 electron 锁定为 11.5.0,请不要手动升级它, 也不要听信任何"升级一下依赖"的建议。


1. 安装 Node.js

前往 Node.js 官网 下载 LTS(长期支持)版本安装即可, 一路下一步。装好之后打开 PowerShell(在开始菜单搜索 "PowerShell"),输入:

node -v
npm -v

能看到版本号(例如 v18.x.x)说明安装成功。

Node.js 的版本对本项目影响不大,它只是用来运行 npm install 这些命令。 FlashBox 应用运行时用的是 Electron 11.5.0 自带的运行环境,和你电脑装的 Node.js 版本没有关系。


2. 获取 Flash 插件 dll(关键步骤,必须自己完成)

由于 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 播放器下载。

⚠️ 部分社区构建版本会对原始 Flash Player 做过修改(例如去除 Adobe 2020 年底 植入的强制熔断验证),这类"补丁版"文件在某些地区可能涉及额外的法律风险, 请自行了解清楚后再决定是否使用。

拿到 dll 文件后:

  1. 把它改名为 pepflashplayer.dll(如果原文件名不同的话)。

  2. 放到本项目的 plugins 目录下,最终结构应该长这样:

    flashbox/
      plugins/
        pepflashplayer.dll   <-- 就是这个文件
      main.js
      ...
    
  3. ⚠️ 小心 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 有可能因为版本号对不上而拒绝加载插件。


3. 安装项目依赖(重点:配置国内镜像)

由于 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 且没有报错,就说明依赖装好了。


4. 运行

npm start

正常情况下会弹出 FlashBox 启动器窗口,里面预置了一个默认入口:

  • 4399 小游戏 - https://www.4399.com/

点击卡片上的"启动"按钮,会新开一个窗口加载对应网址。窗口大小默认会自动按 网页实际内容大小锁定(没有浏览器地址栏,窗口大小固定、不能手动拖拽调整), 尽量做到刚好贴合游戏画面、没有滚动条也没有大片留白。如果游戏弹出了充值 / 公告等新窗口,新窗口同样会用这种"锁定大小"的方式打开。

游戏窗口里随时可以按 F11 切换到没有任何窗口边框的真全屏模式(老页游大多是 固定分辨率设计的,全屏后如果画面没占满整个屏幕、周围有黑边是正常的,因为页面 本身没有做到全屏自适应),再按一次 F11 切回锁定大小的窗口模式。

你也可以在顶部的"添加游戏"表单里填写名称和网址(需以 http://https:// 开头),添加自己的游戏入口;点击游戏卡片上的"编辑"可以修改名称/网址,点"删除" 可以移除不需要的入口。所有游戏数据会自动保存在:

%APPDATA%\FlashBox\games.json

下次打开 FlashBox 会自动读取,不需要重新添加。

隐藏页面里不想要的元素(比如网站自己的顶部导航栏)

不同网站的页面结构千差万别,FlashBox 没办法(也不应该)针对某个具体网站写死 "自动隐藏顶部导航栏"这种逻辑,而是提供了一个通用的"按 CSS 选择器隐藏元素"功能, 需要你自己动手指认一下要隐藏的是哪个元素:

  1. 启动这个游戏,游戏窗口里按 F12 打开开发者工具。
  2. 用开发者工具左上角的"选择元素"箭头(或 Ctrl+Shift+C),点一下你想隐藏的 那块区域(比如顶部导航栏)。
  3. 在右侧高亮的 HTML 上右键 -> 复制 -> 复制选择器(Copy selector),或者直接 看它的 class / id 自己写一个选择器,比如 .top-nav#header
  4. 回到 FlashBox 启动器,点这个游戏卡片上的"编辑",把选择器粘贴到"要隐藏的 元素 CSS 选择器"这一栏(可以填多个,用逗号分开),保存后重新启动这个游戏 就生效了。

这个功能对所有游戏通用,不是针对某个网站的特殊处理,写错了选择器也不会导致 其他游戏或 FlashBox 本身出问题,大不了这个游戏页面没有元素被隐藏而已。


5. 打包成单文件 exe

开发调试没问题之后,执行:

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


6. 常见问题

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 被杀毒软件报毒 / 报木马,怎么办?

这是误报,原因主要有两个:

  1. electron-builder 打包出的免安装单文件 exe,本质上是把一堆资源和 Node.js 运行时打包压缩进一个可执行文件,这种"自解压/自加载"的行为模式和一些木马、 捆绑软件的行为特征相似,容易被启发式查杀误伤,是 Electron 打包程序的通病, 和代码本身是否安全无关。
  2. pepflashplayer.dll 是一个已经停止更新多年的浏览器插件,而 Flash 历史上 出现过大量真实漏洞,杀毒软件的特征库里往往把"Flash 播放器插件"这一类文件 直接标记为高风险/过时组件,属于"一刀切"的策略性拦截,不代表你下载到的这个 具体文件真的带毒。

建议:

  • 仅从可信来源(如上文提到的 Clean Flash 社区版、flash.cn)获取 dll,不要 随便从来路不明的网盘/论坛下载。
  • 如果本地杀毒软件删除了 dll 或拦截了 exe 运行,把 FlashBox 所在目录添加到 杀毒软件的信任 / 白名单目录即可。
  • 只在自己完全掌控的电脑上使用,不建议分发未经他人核实的打包产物给不了解 原理的人,避免被误解为传播木马。

Q: 可以用更高版本的 Electron 吗?体验/性能/安全性是不是更好?

不可以。Electron 12 开始彻底移除了 PPAPI Flash 支持,升级 Electron 等于让 Flash 游戏彻底无法运行,这是本项目存在的意义所在。请不要升级 electron 依赖 版本,也不要升级 Chromium 内核相关的任何依赖。


7. 免责声明

本项目仅供个人怀旧、学习技术原理之用,采用 MIT 协议 开源,代码 按"现状"提供,不附带任何明示或暗示的担保。Flash 已经停止官方支持并存在已知 安全风险(本项目默认开启了 no-sandbox),请自行评估运行来源不明网页游戏的 风险,不要在其中输入敏感信息(如支付密码)。

pepflashplayer.dll 版权归 Adobe 所有,本项目不提供、不分发该文件,也不提供 具体的第三方下载直链,仅提供加载它的技术方案;获取该文件的合法性、来源是否 可信,均由使用者自行判断和承担。通过本项目加载的任何第三方网页/游戏内容的 版权与合规性,同样由使用者自行负责,与本项目及其贡献者无关。


8. 项目结构

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

About

FlashBox - 基于 Electron 11.5.0 (PPAPI Flash) 的老页游 Flash 启动器

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages