在电子主文件中定义不同的BrowserWindows,但只有其中一个有效吗?

时间:2018-04-12 17:10:37

标签: javascript html electron

我正在制作一个有多个窗口的电子项目。其中一个是弹出窗口,只要主窗口出现错误/等等就会出现。我正在尝试编写我的代码,以便此弹出窗口可以根据导致其显示的内容来更改其文本。

如前所述,我在main.js文件中定义了主BrowserWindow对象,在index.js文件中定义了所有其他BrowserWindow对象。这一切都应该具备。我尝试使用IPC渲染器与弹出窗口进行通信,只需要在与ipcMain相同的文件中引用其BrowserWindow。这意味着我必须将从Browser.js初始化BrowserWindow的代码移动到main.js.问题是,只要我这样做,弹出窗口就会呈现完全空白。这是为什么?如果它有帮助,这里是我希望能够在主文件中引用的BrowserWindow的代码......

const modalPath = path.join('file://', __dirname, 'popup.html');
let win2 = new BrowserWindow({ 
    frame: false, 
    alwaysOnTop: true,
    width: 400, 
    height: 200 });
win2.on('close', function () { win = null });
win2.loadURL(modalPath);
win2.show();

请注意,如果上面的代码放在我的index.js文件中,则完全符合预期。它只在我在main.js文件中使用它时才起作用,这是(我认为)我需要它来引用它以便ipcMain对象向窗口发送消息。

1 个答案:

答案 0 :(得分:0)

事实证明,由于URL的处理方式,窗口无法正常呈现。我将loadURL方法的代码设置更改为类似于主窗口(包括在下面)的代码,并且它正常工作。我认为它与查找文件有关,因为这个主文件与此代码所在的文件夹位于不同的文件夹中。不幸的是,这并不能解决我遇到的每一个问题,因为它仍然存在好像我不能将ipc消息发送到新创建的窗口,但这就解决了我在这里问到的问题。

win2 = new BrowserWindow({
    frame: false, 
    alwaysOnTop: true,
    width: 400, 
    height: 200 });
win2.loadURL(url.format({
    pathname: path.join(__dirname, 'src/popup.html'),
    protocol: 'file:',
    slashes: true
}));
//Nothing else related to the URL loading below here