[英]Electron - prevent window close but allow redirects
我有一个简单的 Electron 应用程序。 主要过程将打开一个浏览器 window (我称之为mainWindow
),我想阻止用户关闭它(用于信息亭目的;仅供参考,我已经有kiosk: true
。我只是想添加另一层保护)。
我在渲染器进程中设置了一个beforeunload
事件侦听器,如下所示:
window.onbeforeunload = (e) => {
console.log('I do not want to be closed')
e.returnValue = false
}
这很好用。 它可以防止 window 以各种方式关闭(至少在 macOS 中),我可以在主进程中使用mainWindow.destroy()
退出该进程。 但是,通过这样做,我无法将我的 window 重定向到任何其他 HTML 文件,无论location.href
或mainWindow.loadFile()
因为它会触发beforeunload
事件并阻止它重定向。
我能想到的一种解决方案是在mainWindow
中使用全屏iframe
并在那里进行重定向,但是沙盒iframe
和使用ipcRenderer
的 window 之间的通信太复杂了。
除此之外,是否有解决方法来区分beforeunload
事件是因为它被关闭还是被重定向而被触发?
除了使用 DOM onbeforeunload
处理程序,您还可以在主进程中侦听BrowserWindow
自己的close
事件,该事件在onbeforeunload
之前发出,但仅在 window 实际要关闭时发出。
根据文档,您必须调用e.preventDefault ()
来防止关闭,但您不必担心页面重定向。
const { BrowserWindow } = require ("electron");
let window;
// However you're initialising your BrowserWindow...
window.on ("close", event => {
event.preventDefault ();
});
#destroy ()
的文档声明它不会发出"close"
事件,因此一切都应该像以前一样工作,除非您正在主进程上监听事件并获得 window 重新加载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.