electron-browser-shell API 终极参考:electron-chrome-extensions 从核心类到 browser-action-list 全收录
electron-browser-shell API 终极参考electron-chrome-extensions 从核心类到 browser-action-list 全收录【免费下载链接】electron-browser-shellA minimal, tabbed web browser with support for Chrome extensions—built on Electron.项目地址: https://gitcode.com/gh_mirrors/el/electron-browser-shell想用 Electron 打造一个能原生运行 Chrome 扩展的浏览器吗electron-browser-shell API中最重要的就是electron-chrome-extensions库。本篇文章将为你完整梳理它的核心类、构造选项、实例方法、事件以及browser-action-list元素的使用方式帮你快速掌握这套Electron Chrome 扩展 API的全部要点。一、electron-browser-shell 是什么electron-browser-shell是一个基于 Electron 构建的极简多标签页浏览器它的最大亮点是支持 Chrome 扩展。Electron 原生只提供基础的扩展支持且聚焦于 DevTools标签页、弹窗、扩展按钮等概念它并不了解。而electron-chrome-extensions库正是为了解决这个问题而生——它把 Electron 的扩展能力提升到接近 Google Chrome 的水平让 uBlock Origin、Dark Reader、1Password 这类知名扩展都能直接运行。二、核心类 ElectronChromeExtensions 快速上手一切扩展能力的入口是主进程中的ElectronChromeExtensions类定义在 index.ts。实例化它你的 Electron 应用就具备了扩展 API 处理能力const { app, BrowserWindow } require(electron) const { ElectronChromeExtensions } require(electron-chrome-extensions) app.whenReady().then(() { const extensions new ElectronChromeExtensions() const browserWindow new BrowserWindow() // 将窗口的 webContents 注册为一个标签页 extensions.addTab(browserWindow.webContents, browserWindow) browserWindow.loadURL(https://example.com) browserWindow.show() })一个会话Session只能绑定一个扩展实例重复创建会抛出错误。你也可以通过静态方法ElectronChromeExtensions.fromSession(session)反查某个会话对应的实例。三、构造函数选项让扩展行为符合你的应用构造函数接收一个 options 对象核心参数如下license必填分发许可证可选GPL-3.0或Patron-License-2020-11-19session可选默认使用session.defaultSession多会话应用可传自定义分区modulePath可选使用 Webpack 等打包器时需要指向模块文件路径createTab(details)扩展调用chrome.tabs.create时触发由你的应用决定如何创建标签页selectTab(tab, window)chrome.tabs.update切换激活标签时触发removeTab(tab, window)chrome.tabs.remove移除标签时触发createWindow(details)chrome.windows.create创建新窗口时触发removeWindow(window)chrome.windows.remove关闭窗口时触发assignTabDetails(details, tab)向后台页/内容脚本补充标签详情这些回调的定义可以在 impl.ts 中查看它们把如何创建标签、如何管理窗口这类浏览器行为完全交给你的应用自定义。四、实例方法与事件速查常用实例方法addTab(tab, window)把webContents注册为标签页使其可被chrome.tabsAPI 访问selectTab(tab)通知扩展系统当前激活标签已切换getContextMenuItems(tab, params)获取给定上下文下的扩展右键菜单项返回Electron.MenuItem[]getURLOverrides()获取特殊页面覆盖映射例如{ newtab: chrome-extension://id/newtab.html }提示addExtensionHost()与addExtension()已废弃Electron 12 无需手动调用。实例事件browser-action-popup-created当chrome.browserActionAPI 创建弹窗时触发返回PopupView实例见 popup.tsurl-overrides-updated扩展加载chrome_url_overrides后触发返回 URL 覆盖映射标签页与窗口的内部状态管理由ExtensionStorestore.ts负责IPC 路由则由ExtensionRouterrouter.ts承担。五、browser-action-list工具栏扩展按钮的完整方案browser-action-list是一个Web Component 元素用来在页面中渲染一排扩展图标按钮点击可触发chrome.browserAction.onClicked事件或弹出扩展弹窗。启用方法preload 注入需要在 preload 脚本中注入browserActionAPIimport { injectBrowserAction } from electron-chrome-extensions/dist/browser-action // 仅在指定页面注入 if (location.href webui://browser-chrome.html) { injectBrowserAction() }在electron-browser-shell的实际实现中工具栏就在 webui.html 里直接使用了这个元素。属性说明partition可选指定扩展加载的会话分区默认使用当前元素所在会话tab可选指定展示状态的标签页 WebContents ID默认使用当前窗口激活标签!-- 默认会话 当前激活标签 -- browser-action-list/browser-action-list !-- 自定义会话 -- browser-action-list partitionpersist:custom/browser-action-list自定义样式该元素是 Shadow DOM 封装的但可以通过 CSS::part()选择器定制/* 垂直排列按钮 */ browser-action-list { flex-direction: column; } /* 修改按钮尺寸 */ browser-action-list::part(action) { width: 16px; height: 16px; } /* 修改徽标样式 */ browser-action-list::part(badge) { background: red; }可用的部分包括action按钮和badge角标数字。六、支持的 chrome.* API 一览除了 Electron 内置支持外本库还覆盖了以下 API完整实现见 browser/api/ 目录API状态chrome.action/chrome.browserAction标题、图标、弹窗、角标、onClicked 等基本齐全chrome.tabsget、query、create、update、remove、reload、sendMessage 等chrome.windowsget、getAll、create、update、remove 及事件chrome.runtimesendMessage、connect、getURL、getManifest 等chrome.storagelocal 完整支持sync/managed 回退到 localchrome.cookiesget、getAll、set、remove、onChangedchrome.contextMenuscreate、remove、removeAll、onClickedchrome.notificationscreate、clear、update、getAll 等chrome.webNavigation导航事件与帧查询Electron 12七、完整示例一个多标签页浏览器electron-browser-shell的主进程实现位于 main.js它展示了完整用法创建窗口后监听标签事件通过extensions.addTab()与extensions.selectTab()同步状态让扩展 API 与真实 UI 保持一致。const extensions new ElectronChromeExtensions({ session: browserSession, createTab(details) { /* 自定义建标签逻辑 */ }, createWindow(details) { return new BrowserWindow() }, }) tabs.on(tab-created, (tab) { self.extensions.addTab(tab.webContents, tab.window) }) tabs.on(tab-selected, (tab) { self.extensions.selectTab(tab.webContents) })八、注意事项与限制建议使用最新版 Electron最低要求为 Electron v35.0.0-beta.3所有后台脚本均为常驻模式persistent非持久化会话incognito不支持 Chrome 扩展使用 Electron 的webRequestAPI 会阻止chrome.webRequest监听器被调用结语通过这份electron-browser-shell API 参考你应该已经掌握了electron-chrome-extensions从核心类到browser-action-list的全部关键知识点。想亲自体验可以克隆仓库https://gitcode.com/gh_mirrors/el/electron-browser-shell后运行项目感受在 Electron 中运行真实 Chrome 扩展的完整流程。【免费下载链接】electron-browser-shellA minimal, tabbed web browser with support for Chrome extensions—built on Electron.项目地址: https://gitcode.com/gh_mirrors/el/electron-browser-shell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

抖音评论采集实战复盘:1100条评论批量导出Excel的完整流程与避坑记录

抖音评论采集实战复盘:1100条评论批量导出Excel的完整流程与避坑记录

抖音评论采集实战复盘:1100条评论批量导出Excel的完整流程与避坑记录 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 上周五下班前,我把一份 1176 行的 Excel 丢进工作群&#xff0c…

2026/10/15 19:10:29 阅读更多 →
不用装虚拟机,Apple芯片Mac也能直接跑Windows软件:Whisky上手手记

不用装虚拟机,Apple芯片Mac也能直接跑Windows软件:Whisky上手手记

不用装虚拟机,Apple芯片Mac也能直接跑Windows软件:Whisky上手手记 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 两年前的那个周五,我收到客户发…

2026/10/17 9:41:03 阅读更多 →
计算机扫盲:计算机的病毒

计算机扫盲:计算机的病毒

刚子:电脑中病毒了,是不是要换一台?刚子今天打开电脑,右下角突然弹出一个红色警告框:“您的电脑已被病毒感染!立即下载XX安全卫士进行查杀!”刚子吓得手抖,差点把鼠标扔出去。他赶紧…

2026/10/16 22:47:53 阅读更多 →

最新新闻

基于STM32H750与SOEM的EtherCAT主站开发实战解析

基于STM32H750与SOEM的EtherCAT主站开发实战解析

1. 为什么我最终选了"H750SOEM"这套组合做EtherCAT主站开发,绕不开一个问题:用哪颗芯片、跑哪套协议栈。市面上主流的方案分两派,一派走ASIC专用芯片,另一派走"MCU软件协议栈"。我这次选的是后者,…

2026/10/18 7:29:04 阅读更多 →
AI辅助学术论文写作书籍(2026.10.17)

AI辅助学术论文写作书籍(2026.10.17)

1、秒懂AI写作:让你轻松成为写作高手(2023.06) 2、玩转ChatGPT:秒变AI写作高手(2024.01) 3、挑战疑难病:SCI论文背后的故事.第二辑(2024.04) 4、AI辅助论文写作——DeepS…

2026/10/18 7:29:04 阅读更多 →
BLDC方波控制SIL测试实战:Simulink模型到代码回环验证

BLDC方波控制SIL测试实战:Simulink模型到代码回环验证

1. 这个项目到底在做什么:BLDC方波控制与SIL的定位先说一个我最近做完的项目,链路是完整的:控制对象是无刷直流电机(BLDC),控制算法是带霍尔传感器的方波控制(也叫六步换相、梯形波控制&#xf…

2026/10/18 7:29:04 阅读更多 →
hom_mat2d_rotate 的 Px 和 Py 参数

hom_mat2d_rotate 的 Px 和 Py 参数

hom_mat2d_translate 里也有 Tx, Ty,那里的 T 是 Translation(平移),表示"平移量";而 P 表示"一个点的位置"。hom_mat2d_rotate 的 Px 和 Py 参数,代表的是旋转中心(也称作…

2026/10/18 7:29:04 阅读更多 →
Vue 3 基础:模板语法、响应式、指令

Vue 3 基础:模板语法、响应式、指令

前言上一篇讲了 JavaScript、DOM 和 ES6,这一篇进入 Vue 3。Vue 是目前最主流的前端框架之一,它把"数据驱动视图"这个理念做到了极致:你只管改数据,页面自动更新。这篇覆盖 Vue 3 的基础三件套:模板语法、响…

2026/10/18 7:29:04 阅读更多 →
全球电商数据接口一键接入:技术要点与选型指南

全球电商数据接口一键接入:技术要点与选型指南

上个季度我帮一个做跨境电商的朋友整理运营流程,他手上有5个平台账号,每天早晨雷打不动要花两小时导出各后台的订单和库存,再做一轮手工汇总。有一回因为某个平台库存同步晚了半天,一单爆款直接超卖,赔了运费还被买家差…

2026/10/18 7:28:03 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →