处理chrome打包应用程序关闭

时间:2014-08-27 13:49:16

标签: javascript google-chrome google-chrome-app

是否可以在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请求。

2 个答案:

答案 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监听器)...它对我来说很完美,但所有其他记录的解决方案在我的测试中根本没用过。