Javascript 在Chrome应用程序中卸载之前?

Javascript 在Chrome应用程序中卸载之前?,javascript,google-chrome-app,onbeforeunload,Javascript,Google Chrome App,Onbeforeunload,显然这是不被支持的。有解决办法吗 unload和beforeunload只有在加载而不是卸载窗口时才会触发,因此它们是无用的。卸载unload和beforeunload的问题是Chrome应用程序在空闲时卸载,在卸载空闲应用程序之前运行代码会使其不空闲不再如果您有数据需要在卸载应用程序之前保存,我建议在应用程序被更改时或经过短暂延迟后保存数据,而不是等到应用程序退出时再保存数据。这可能不是最佳做法,但这对我很有效 如果要从窗口本身而不是后台页面在应用程序窗口上注册onClosed侦听器,可以获取

显然这是不被支持的。有解决办法吗


unload
beforeunload
只有在加载而不是卸载窗口时才会触发,因此它们是无用的。

卸载
unload
beforeunload
的问题是Chrome应用程序在空闲时卸载,在卸载空闲应用程序之前运行代码会使其不空闲不再如果您有数据需要在卸载应用程序之前保存,我建议在应用程序被更改时或经过短暂延迟后保存数据,而不是等到应用程序退出时再保存数据。

这可能不是最佳做法,但这对我很有效

如果要从窗口本身而不是后台页面在应用程序窗口上注册onClosed侦听器,可以获取后台页面的引用以在回调中使用

chrome.runtime.getBackgroundPage(function (backgroundPage){
  chrome.app.window.current().onClosed.addListener(function(){
    console.log("This won't appear anywhere since (this.)console doesn't exist anymore");
    backgroundPage.console.log("This will appear in the background page console, which you can open from the Extensions settings page");
  });
});

然后,您可以使用backgroundPage.chrome、backgroundPage.console等进行任何清理,并显示控制台日志以进行调试。这对于我使用chrome.hid API的特殊情况是必要的,并且需要在应用程序关闭时向USB设备发送停止命令。

iframe中的窗口如何?我可以手动卸载,但卸载和beforeunload事件仍然不会触发。您可以在使用chrome.app.window.create创建的窗口上注册事件侦听器,以便在后台页面关闭时收到通知: