在电子(原子壳层)中使用'before-quit'事件



我有一个应用程序,该应用程序需要在退出之前进行API调用(类似Logout)。因为我仍然需要访问API调用的某些应用数据(Redux Store),因此我决定收听应用程序上的"前请求"事件。

我尝试了以下代码:

import {remote} from 'electron';
let loggedout = false;
remote.app.on('before-quit', (event) => {
  if (loggedout) return; // if we are logged out just quit.
  console.warn('users tries to quit');
  // prevent the default which should cancel the quit
  event.preventDefault();
  // in the place of the setTimout will be an API call
  setTimeout(() => {
    // if api call was a success
    if (true) {
      loggedout = true;
      remote.app.quit();
    } else {
      // tell the user log-out was not successfull. retry and quit after second try.
    }
  }, 1000);
});

该事件似乎从未开火或阻止关闭不起作用。当我用browser-window-blur替换before-quit时,事件 do fire,并且代码似乎有效。

用于参考i使用电子1.2.8(由于某些依赖关系,我无法升级)。我已经进行了仔细检查,并且该版本已经实现了before-quit事件。

有什么想法为什么似乎没有解雇此事件?

提前感谢和节日快乐!

我也有相同的问题,这是我的解决方案:

在渲染器中:

const { ipcRenderer } = require('electron')
window._saved = false
window.onbeforeunload = (e) => {
    if (!window.saved) {
        callSaveAPI(() => {
            // success? quit the app
            window._saved = true
            ipcRenderer.send('app_quit')
            window.onbeforeunload = null
        })
    }
    e.returnValue = false
}

主要:

const { ipcMain } = require('electron')
// listen the 'app_quit' event
ipcMain.on('app_quit', (event, info) => {
    app.quit()
})

有2个问题阻止代码工作:

  1. 某种程度上,"提前"事件不会在Rerender进程中发射。(不是main.js)。
  2. 一旦我将EventListener移动到主要过程中,防止默认值阻止窗口关闭。这只能通过添加返回false的window.onbeforeunload函数来完成。就像该线程中建议的一样。

一个警告是onbeforeunload的返回语句不会更新。就我而言,我首先返回false(以防止窗口关闭)。第二次没有返回false,但它一直阻止窗口关闭。

我通过使用未返回false的新功能覆盖window.onbeforeunload来解决这个问题。

相关内容

  • 没有找到相关文章

最新更新