Javascript Google Chrome扩展的浏览器关闭事件?

Javascript Google Chrome扩展的浏览器关闭事件?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在为谷歌浏览器开发一个扩展。我的后台脚本everytime在使用XMPP API的服务器上进行授权,并订阅PubSub节点。我需要在退出时取消订阅,否则虚拟订阅将保留在服务器上。Google Chrome扩展API中是否存在任何onBrowserClose事件?Chrome扩展API中没有此类事件 但是,每次窗口关闭时都会触发chrome.windows.onRemoved事件。我想如果您关闭了最后一个窗口,您可以在这个事件中进行检查,但不幸的是,由于Chrome的异步特性,这不起作用 我尝

我正在为谷歌浏览器开发一个扩展。我的后台脚本everytime在使用XMPP API的服务器上进行授权,并订阅PubSub节点。我需要在退出时取消订阅,否则虚拟订阅将保留在服务器上。Google Chrome扩展API中是否存在任何
onBrowserClose
事件?

Chrome扩展API中没有此类事件

但是,每次窗口关闭时都会触发
chrome.windows.onRemoved
事件。我想如果您关闭了最后一个窗口,您可以在这个事件中进行检查,但不幸的是,由于Chrome的异步特性,这不起作用

我尝试的是在
onRemoved
事件处理程序中运行一个简单的AJAX请求。AJAX请求从未到达服务器,因为Chrome在运行事件之前已经关闭了(或者只是忽略了它)


最后的答案是:不,据我所知,目前你不能。您可能希望在上启动以下错误报告,以便在更新时引起注意。

添加浏览器关闭事件是一个非常频繁的请求。星更新。阅读错误报告,通过按键检测浏览器何时关闭。

如果发现打开的选项卡数为0,则可以将其视为Chrome onClose事件。在我的例子中,我必须在Chrome关闭之前取消桌面通知,因为否则它会崩溃。 我就是这样做的:

1。使用以下命令初始化变量num_tabs:
chrome.tabs.getAllInWindow( null, function( tabs ){
    console.log("Initial tab count: " + tabs.length);
    num_tabs = tabs.length;
});
2。创建选项卡时增加选项卡数:
chrome.tabs.onCreated.addListener(function(tab){
    num_tabs++;
    console.log("Tab created event caught. Open tabs #: " + num_tabs);
});
3。删除选项卡时减少num_tabs,如果num_tabs=0,则在关闭事件处理程序时运行浏览器
chrome.tabs.onRemoved.addListener(function(tabId){
    num_tabs--;
    console.log("Tab removed event caught. Open tabs #: " + num_tabs);
    if( num_tabs == 0 )
        notification.cancel();
});
这个对我很有用:

chrome.windows.onRemoved.addListener(function(windowId){
  alert("!! Exiting the Browser !!");
});

它使用
chrome.windows
而不是
chrome.tabs

TL;DR:尝试
窗口。onunload
事件,它适用于某些情况

正如前面提到的,我们通常无法处理类似于
onBrowserClose
事件的事件并阻止浏览器关闭。但在某些情况下,我们可以使用
window.onunload
事件来同步执行操作,如果它真的同步执行,它确实可以工作

根据我的经验,您至少可以:

  • 在HTML5
    localStorage
    (同步的)中保存一些信息(例如日志)
  • 调用一些异步chrome扩展API函数,但无法得到结果。(它对我有用!耶!)
  • 执行synchronousXMLHTTPRequest(是的,有时它可以工作)

感谢您的回复,事实上,我决定采用老派的方式,只需将以前的订阅信息保存在本地存储中,并在重新加载后台脚本时取消订阅=)即使考虑到chrome的异步特性,正如codingbug的回答所说,这是否有效?如果您的浏览器有一个扩展,它具有“后台”权限,请参阅-->,即使你认为chrome已经退出,它也不会退出。您必须显式终止进程或强制退出或其他操作。此解决方案实际上就是答案,但是,上一次触发选项卡中的http请求。onRemoved不会运行,猜猜原因,有人吗?请记住,浏览器还有其他退出方式,包括断电和崩溃。即使有一个100%可靠的方法来检查浏览器是否正常退出,你仍然会有漏洞。很快你就会有多个Chrome窗口,并且这将在每次关闭某个窗口时触发,而不仅仅是在最后一次关闭窗口时。这不起作用!chrome在触发最后一个事件windows.onRemoved之前退出