如何从Electron中的另一个脚本访问mainWindow?

leo*_*ess 1 javascript modal-dialog node.js electron

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

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

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

如何创建一个对话框,该对话框是mainWindow的子级,而不在main.js中创建它?可以IPC帮助不知何故?

mik*_*est 9

接受的答案仍然是正确的,但相当旧,与此同时,Electron 团队决定慢慢弃用该remote模块(更多信息请参见此处此处):

在此输入图像描述


然而,我能够通过使用 来修复它BrowserWindow.getFocusedWindow(),这只做了一个微小的假设,即触发 MsgBox 的窗口是当前关注的窗口(我的猜测是,在 99% 的情况下都是如此)。这是更新后的代码:

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

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


Ale*_*ner 6

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

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

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