You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为基于Electron的Windows/macOS桌面应用构建预装私有扩展的自定义Chromium浏览器

解决方案:Electron应用预装私有Chromium扩展

我之前折腾过类似的需求,给你几个亲测有效的方案,完全适配新版Electron和Chromium,不需要依赖Chrome商店:

方案一:用Electron Session API直接加载本地扩展(最推荐)

这是最简单且不需要编译源码的方法,Electron原生支持加载本地扩展,不管是不是商店里的。

操作步骤:

  1. 准备好你的扩展目录:可以是开发阶段的未打包扩展文件夹,或者把CRX文件解压后的目录(确保manifest.json在根目录)
  2. 在Electron主进程中,针对目标窗口的Session加载扩展:
    • 如果要给所有窗口预装,用默认Session:
      const { app, session } = require('electron');
      const path = require('path');
      
      app.whenReady().then(async () => {
        try {
          // 加载本地扩展,替换为你的扩展路径
          const extensionInfo = await session.defaultSession.loadExtension(
            path.join(__dirname, '../extensions/my-private-extension')
          );
          console.log(`扩展已加载:${extensionInfo.name}`);
        } catch (err) {
          console.error('加载扩展失败:', err);
        }
      });
      
    • 如果要给特定窗口单独加载,创建自定义Session:
      const { BrowserWindow, session } = require('electron');
      const customSession = session.fromPartition('my-custom-session');
      
      // 先加载扩展,再创建窗口
      customSession.loadExtension('/path/to/extension').then(() => {
        const win = new BrowserWindow({
          webPreferences: {
            session: customSession
          }
        });
      });
      

注意事项:

  • 确保你的扩展Manifest版本和Electron对应的Chromium版本兼容(比如Electron 28+支持Manifest V3)
  • 打包应用时,要把扩展目录包含到应用资源中,用相对路径避免路径问题

方案二:修改Electron源码,把扩展内置为“预装”扩展(深度定制)

如果你需要像官方预装扩展那样,用户无法轻易卸载,可以修改Electron源码后重新编译,把私有扩展打包进Electron二进制里。

操作步骤:

  1. 克隆Electron源码到本地,切换到你使用的Electron版本分支
  2. 把你的扩展打包成CRX文件(可以用Chrome开发者工具打包,或者第三方工具)
  3. 在Electron源码中找到扩展预装配置:
    • 打开chrome/common/extensions/extension_constants.h,添加你的扩展ID到kPreinstalledExtensions数组
    • 把CRX文件放到chrome/common/extensions/preinstalled目录下
  4. 按照Electron官方编译文档重新编译Electron
  5. 在你的应用中使用编译后的自定义Electron版本

注意事项:

  • 编译Electron需要配置好编译环境(比如Windows需要VS,macOS需要Xcode),过程比较耗时
  • 升级Electron版本时需要重新修改源码编译

方案三:用Chromium命令行参数加载扩展(快速验证)

如果只是快速测试或者简单场景,可以在启动BrowserWindow时添加--load-extension参数:

const { BrowserWindow } = require('electron');
const path = require('path');

const win = new BrowserWindow({
  webPreferences: {
    additionalArguments: [
      `--load-extension=${path.join(__dirname, '../extensions/my-extension')}`
    ]
  }
});

注意事项:

  • 这个方法的扩展性不如Session API,且用户如果能修改启动参数可能会绕过,但适合快速验证需求

内容的提问来源于stack exchange,提问作者BrnKhn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:02:40