如何在Electron中防止窗口的多个示例?

vd8tlhqk  于 12个月前  发布在  Electron
关注(0)|答案(2)|浏览(162)

我在一定的时间间隔内检查更新。每当更新失败时,我都会显示一个带有错误通知的窗口。问题是每次创建新窗口时。
我已经试

let window = null;

if(window === null) {
    window = new BrowserWindow();
    window.loadURL('notification.html');
}

else {
    window.restore(); // But that is only for minimizing
    // WHAT DO I PUT HERE?
}

字符串

drkbr07n

drkbr07n1#

从Electron 5.0.x开始,单示例API发生了变化。您可以这样使用它。

/** Check if single instance, if not, simply quit new instance */
let isSingleInstance = app.requestSingleInstanceLock()
if (!isSingleInstance) {
  app.quit()
}

// Behaviour on second instance for parent process- Pretty much optional
app.on('second-instance', (event, argv, cwd) => {
  if (window) {
    if (window.isMinimized()) window.restore()
    window.focus()
  }
})

字符串

lnvxswe2

lnvxswe22#

我有另一个设置窗口,和一个按钮从菜单中打开它。所以,如果用户点击菜单中的那个按钮,它就打开了设置窗口的多个示例。
10次点击=设置窗口的10个示例。
所以我写了下面的代码来解决这个问题,在创建之前检查窗口是否已经存在。我不知道这是否是完成这个任务的最好方法.

let settingsWindow;

const createSettingsWindow = () => {
    if (!settingsWindow) { // If not already opened
        settingsWindow = new BrowserWindow({
            width: 500,
            height: 400,
        })
        settingsWindow.loadURL(url.format({
            pathname: path.join(__dirname, "./src/setting.html"),
            protocol: 'file',
            slashes: true,
            resizable: false,
        }))
        settingsWindow.on("closed", () => {
            settingsWindow = null;
        })
    } else {
        // Handle behaviour when opening again from the menu.
        console.log("Don't open another instance of About window.")
    }
}

字符串
因此,现在当用户单击菜单中的设置按钮时,它会在控制台中打印Don't open another instance of About window

相关问题