【问题标题】:How to fix BrowserWindow is not a constructor error when creating child window in Electron renderer process在 Electron 渲染器进程中创建子窗口时如何修复 BrowserWindow 不是构造函数错误
【发布时间】:2018-01-20 05:35:11
【问题描述】:

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

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

const childWindow = new BrowserWindow({
   width: 800,
   height: 600
});

我收到一个错误提示

BrowserWindow 不是构造函数。

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

【问题讨论】:

  • 我通过包含 electron.remote.BrowserWindow 解决了我自己的问题。 electron.atom.io/docs/api/remote
  • 您应该考虑提供完整的自我回答,因为您找到了问题的解决方案。
  • 刚刚添加了完整的自我回答,谢谢!

标签: javascript electron


【解决方案1】:

我发现我需要做的就是使用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
});

remote模块更完整的解释在这里:https://electron.atom.io/docs/api/remote/

【讨论】:

  • 我收到 TypeError: Cannot read property 'BrowserWindow' of undefined using your above code
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    由于能够在我的渲染器进程中访问 dialog 模块,我一直遇到相关错误。我最终遵循了这个网页上的指南,它是通过 ipc 完成的:https://developpaper.com/using-electron-to-call-up-the-system-dialog-box/

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 2017-01-30
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2017-07-06
      • 1970-01-01
      相关资源
      最近更新 更多