Javascript 如何将自定义chrome扩展添加到我的Electron应用程序?

Javascript 如何将自定义chrome扩展添加到我的Electron应用程序?,javascript,google-chrome-extension,electron,add-on,Javascript,Google Chrome Extension,Electron,Add On,我在电子浏览器窗口中添加chrome插件时遇到了一些问题 在创建窗口之前(以及ready事件触发之后),我尝试添加浏览器需要的devtools扩展来进行屏幕共享 BrowserWindow.addDevToolsExtension('/home/USER/.config/chromium/Default/Extensions/dkjdkjlcilokfaigbckcipicchgoazeg/1.5_0'); 我遵循了这一点,它对他们的示例起到了作用(添加了react develop工具)。当我

我在电子浏览器窗口中添加chrome插件时遇到了一些问题

在创建窗口之前(以及
ready
事件触发之后),我尝试添加浏览器需要的devtools扩展来进行屏幕共享

BrowserWindow.addDevToolsExtension('/home/USER/.config/chromium/Default/Extensions/dkjdkjlcilokfaigbckcipicchgoazeg/1.5_0');
我遵循了这一点,它对他们的示例起到了作用(添加了react develop工具)。当我使用自己的chrome扩展插件执行完全相同的操作时,我有一个错误:

[4735:1116/163422.268391:ERROR:CONSOLE(7701)] "Skipping extension with invalid URL: chrome-extension://extension-name", source: chrome-devtools://devtools/bundled/shell.js (7701)

我真的不明白为什么指定的错误是“无效URL”,因为我正在用react插件做完全相同的事情/过程,没有任何问题。我也不知道该怎么办。我的chrome插件是否可能与电子不兼容

看起来您正在尝试添加常规的Chrome扩展,而不是Dev Tools扩展

BrowserWindow.addExtension(path)
方法用于常规Chrome扩展:

BrowserWindow.addExtension(路径)

  • 路径
    字符串
添加位于
路径
Chrome扩展名,并返回扩展名

如果扩展的清单丢失或不完整,该方法也不会返回

注意:在发出
app
模块的
ready
事件之前,不能调用此API

-

相反,
BrowserWindow.addDevToolsExtension(path)
方法用于开发工具扩展:

BrowserWindow.addDevToolsExtension(路径)

  • 路径
    字符串
添加位于路径的DevTools扩展名,并返回扩展名

扩展将被记住,因此您只需调用此API一次,此API不用于编程。如果尝试添加已加载的扩展,此方法将不会返回,而是将警告记录到控制台

如果扩展的清单丢失或不完整,该方法也不会返回

注意:在发出
app
模块的
ready
事件之前,不能调用此API

-

请注意,在这两种情况下,您都需要等待
app
模块发出
ready
事件:

const{BrowserWindow,app}=require('electron'))
让mainWindow=null
函数main(){
BrowserWindow.addExtension(“/path/to/extension”)
mainWindow=新浏览器窗口()
mainWindow.loadURL('https://google.com')
mainWindow.on('close',事件=>{
主窗口=空
})
}
应用程序开启('ready',main)

虽然有文档记录,但在大多数情况下,它不会做太多,因为Electron只支持
chrome.*
API中的一部分(显然只支持所需的内容),而且他们没有任何计划全面支持chrome扩展API。

目前在Electron中支持chrome扩展。该支持尚未完成,但似乎定期发布更新

祝你好运


当前的pull请求是为

打开的,Electron 9对扩展有更多的支持

要加载它们,请使用
session.loadExtension

const{app,BrowserWindow,session}=require('electron'))
// ... 在createWindow函数中,该函数在app.whenReady之后调用
const mainWindow=新浏览器窗口({…})
const ext=wait session.defaultSession.loadExtension('/path/to/unpacket/chrome ext')
console.log('ext',ext)
//输出配置文件
// {
//id:'dcpdbjnmhhlnlbibpeiambicbbndim',
//名称:'Up!–免费社交机器人',
//路径:'/Users/caffeinum/Development/GramUp/chrome ext',
//网址:chrome-extension://dcpdbjjnmhhlnlbibpeeiambicbbndim/',
//版本:“1.7.0”,
//清单:{…}
// }
阅读更多:


此外,还有另一个项目可以帮助您实现这一点,还添加了其他功能:

您是在尝试添加标准扩展(例如React devtools)还是自己创建的扩展?@MTCoster这是我们公司为了在我们的平台上实现屏幕共享而创建的扩展。根据文档,似乎您必须为不同的操作系统指定不同的URL。这是在哪个操作系统上使用/开发的?@user3864563我们正在Ubuntu上开发/测试它。必须为每个操作系统指定不同的URL吗?我在documentationUpdate中找不到更多的支持:我确实应该使用.addExtension,因为我正在尝试添加一个常规的chrome扩展,但它仍然不起作用。我仍然有相同的错误“跳过带有无效URL:chrome的扩展”-extension://extension-name". 我在ready事件之后添加了click扩展,这样就不会出错了。我尝试过其他扩展,比如grammarly,我也遇到了完全相同的问题。我想这可能与扩展无关,而是我如何导入它。编辑:我集成chrome扩展的方式可能有问题。现在我从.config/Chromium/Default/Extensions中的Extensions文件夹中获取它,并将其粘贴到我的项目中。这不是你应该怎么做吗?遇到同样的事情-有人找到答案了吗?同样的问题,有什么帮助吗?从2021年5月1日起,它已被弃用: