从Electron中的其他脚本访问mainWindow

时间:2018-05-14 12:19:31

标签: javascript jquery node.js modal-dialog electron

我的电子应用定义 main.js 中的BrowserWindow mainWindow 。它加载一个html,最终在html内部运行一个显示简单警告的函数dialog.showMessageBox()

dialog.showMessageBox({
    type: 'warning',
    message: "You have been warned.",
    buttons: ["OK"]
});

我希望此对话框成为 mainWindow b / c的子对象,使其成为模态,在关闭之前禁用 mainWindow 。要实现这一点,通常只需在类型声明之前添加mainWindow,。不幸的是,它不知道变量 mainWindow ,因为dialog.showMessageBox()是在不同的脚本( site.js )中创建的。

如何创建一个对话框,它是 mainWindow 的子对象而不在 main.js 中创建它? 可以ipc以某种方式提供帮助吗?

2 个答案:

答案 0 :(得分:6)

您可以使用Electron的remote模块从该窗口中包含(加载)的脚本中获取当前BrowserWindow

const remote = require ("electron").remote;

dialog.showMessageBox (remote.getCurrentWindow (), {
  type: "warning",
  message: "You have been warned.",
  buttons: ["OK"]
});

答案 1 :(得分:2)

接受的答案仍然是正确的,但已经很旧了,与此同时,Electron 团队决定慢慢弃用 remote 模块(更多信息 herehere):

enter image description here


但是,我能够通过使用 BrowserWindow.getFocusedWindow() 修复它,这只是一个很小的假设,即触发 MsgBox 的窗口是当前正在聚焦的窗口(我的猜测是在 99% 的情况下真的)。这是更新后的代码:

const { dialog, BrowserWindow } = require ("electron");

dialog.showMessageBox (BrowserWindow.getFocusedWindow(), {
  type: "warning",
  message: "You have been warned.",
  buttons: ["OK"]
});