在Electron渲染器过程中创建子窗口时,如何修复BrowserWindow不是构造函数错误

Ele*_*ova 11 javascript electron

我正在使用电子来构建包含两个窗口的应用程序.我正在尝试从渲染器进程内部打开第二个窗口,执行以下操作:

const electron = require('electron');
const BrowserWindow = electron.BrowserWindow;

const childWindow = new BrowserWindow({
   width: 800,
   height: 600
});
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说

BrowserWindow不是构造函数.

我的另一个选择是使用window.open,但这并不理想,因为它返回的BrowserWindowProxy对象具有有限的功能.

Ele*_*ova 31

我发现我需要做的就是使用remote模块.Electron不允许从渲染器进程直接创建浏览器窗口,因为它(BrowserWindow)需要ipc模块与主进程通信.电子文档说:

在Electron中,与GUI相关的模块(例如对话框,菜单等)仅在主进程中可用,而不在渲染器进程中可用.为了在渲染器进程中使用它们,必须使用ipc模块将进程间消息发送到主进程.

所以,new electron.BrowserWindow()不起作用.但是,使用remote模块正确设置与主进程的进程间通信,以下修改后的代码对我有用:

const electron = require('electron');
const BrowserWindow = electron.remote.BrowserWindow;

const childWindow = new BrowserWindow({
   width: 800,
   height: 600
});
Run Code Online (Sandbox Code Playgroud)

有关remote模块的更完整说明,请访问:https://electron.atom.io/docs/api/remote/

  • 我收到 TypeError: Cannot read property 'BrowserWindow' of undefined 使用上面的代码 (8认同)

小智 10

对于也有此问题并且其代码不在电子渲染器内的任何人,您可能正在使用运行脚本node script.js,您需要使用运行它electron script.js