适用于Google Chrome扩展程序的事件onBrowserClose?

sim*_*ple 18 javascript google-chrome google-chrome-extension

我正在为Google Chrome开发扩展程序.我的后台脚本每次都在使用XMPP API的服务器上进行授权,并订阅PubSub节点.我需要在退出时取消订阅,否则虚拟订阅将保留在服务器上.onBrowserCloseGoogle Chrome扩展程序API中是否有任何活动?

aol*_*lde 12

Chrome Extension API中没有此类事件.

然而chrome.windows.onRemoved,每次窗口关闭时都会触发一个事件.我想如果你关闭了最后一个窗口,你可以检查这个事件,但遗憾的是由于Chrome的异步性质,这不起作用.

我尝试的是在onRemoved事件处理程序中运行一个简单的AJAX请求.AJAX请求永远不会进入服务器,因为Chrome在运行事件之前已经关闭(或者只是忽略它).

最后的答案是:不,目前你不能,据我所知.您可能希望在http://crbug.com/30885上标明以下错误报告,以了解更新.


hon*_*man 6

如果您在打开的标签数为0时遇到这种情况,则可以将其视为Chrome onClose事件.在我的情况下,我必须在Chrome关闭之前取消桌面通知,因为它会崩溃.我就这样做了:

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

  • 正如codingbug的回答所说,即使考虑到chrome的异步性质,这是否也有效? (2认同)