是否可以在Chrome打包应用程序关闭之前运行一些代码?
这些方法没有帮助:
chrome.app.window.current().onClosed
chrome.runtime.onSuspend
window unload event
例如:
chrome.runtime.onSuspend.addListener(function() {
$.ajax({ url: 'http://isup.me/' });
});
关闭应用程序后,我在Web监视工具(Fiddler2)中看不到任何http请求。
答案 0 :(得分:2)
When a packaged app is closing,其活动页面(在清单的后台脚本部分中定义)收到chrome.runtime.onSuspend
个事件。所以,你的代码应该在那里。但..
此事件表示正在卸载,cleanup只有很短的时间。引用:
一旦触发此事件,应用程序运行时就会启动关闭应用程序的过程:所有事件都会停止触发并停止执行JavaScript。处理此事件时启动的任何异步操作都不能保证完成。 让清理任务保持同步和简单。
$.ajax()
是一个异步且相当慢的操作。因此,它很有可能在清理处理程序中失败。
原则上,这可以同步,但在Chrome应用中为disabled。所以不,当您的应用关闭时,您无法可靠地发送网络请求。
使用onClosed
处理程序的there is a workaround可能是:
chrome.app.window.create('window.html', function(win) {
win.onClosed.addListener(function() {
// ...
});
});
这可能有效,因为从此处开始的任何异步任务在onSuspend
被触发之前从技术上开始,因此事件页面不应该开始卸载。但我没有亲自尝试过。
答案 1 :(得分:0)
我可以保证解决方法(在window.create()中回调注册一个.onClosed监听器)...它对我来说很完美,但所有其他记录的解决方案在我的测试中根本没用过。