問題描述
我正在使用 electron 構建一個包含兩個窗口的應用程序.我正在嘗試從渲染器進程內部打開第二個窗口,執行以下操作:
I'm using electron to build an application that includes two windows. I'm trying to open a second window from inside renderer process doing something like:
const electron = require('electron');
const BrowserWindow = electron.BrowserWindow;
const childWindow = new BrowserWindow({
width: 800,
height: 600
});
我收到一個錯誤提示
BrowserWindow 不是構造函數.
BrowserWindow is not a constructor.
我的另一個選擇是使用 window.open,但這并不理想,因為它返回 BrowserWindowProxy 對象,它的功能有限.
My other option is to use window.open, but that is not ideal since that returns BrowserWindowProxy object, which has limited functionality.
推薦答案
我發現我需要做的就是使用 remote
模塊.Electron 不允許直接從渲染進程創建瀏覽器窗口,因為它 (BrowserWindow) 需要 ipc
模塊與主進程通信.電子文檔說:
I found that all I needed to do was to use the remote
module.
Electron doesn't allow to directly create a browser window from the renderer process, because it (BrowserWindow) requires ipc
module to communicate with the main process. Electron documentation says:
在 Electron 中,與 GUI 相關的模塊(如對話框、菜單等)僅在主進程中可用,在渲染器進程中不可用.為了在渲染器進程中使用它們,需要 ipc 模塊將進程間消息發送到主進程.
In Electron, GUI-related modules (such as dialog, menu etc.) are only available in the main process, not in the renderer process. In order to use them from the renderer process, the ipc module is necessary to send inter-process messages to the main process.
所以,new electron.BrowserWindow()
不起作用.但是,使用 remote
模塊正確設置了與主進程的進程間通信,以下修改后的代碼對我有用:
So, new electron.BrowserWindow()
doesn't work.
However, using remote
module correctly sets up inter-process communicating with the main process and the following modified code works for me:
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/
A more complete explanation of remote
module is here: https://electron.atom.io/docs/api/remote/
這篇關于在 Electron 渲染器進程中創建子窗口時如何修復 BrowserWindow 不是構造函數錯誤的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!