我正在为 Google Chrome 开发一个扩展程序。我的后台脚本每次都在使用 XMPP API 的服务器上授权,并订阅 PubSub 节点。我需要在退出时取消订阅,否则虚拟订阅将保留在服务器上。onBrowserClose
Google Chrome 扩展 API 中是否有任何事件?
Google Chrome 扩展程序的 onBrowserClose 事件?
IT技术
javascript
google-chrome
google-chrome-extension
2021-02-26 19:05:07
5个回答
Chrome 扩展 API 中没有此类事件。
然而chrome.windows.onRemoved
,每次窗口关闭时都会触发一个事件。我想如果你关闭最后一个窗口,你可以检查这个事件,但不幸的是,由于 Chrome 的异步特性,这不起作用。
我尝试在onRemoved
事件处理程序中运行一个简单的 AJAX 请求。AJAX 请求从未到达服务器,因为 Chrome 在运行事件之前已经关闭(或者只是忽略它)。
最后的答案是:不,目前你不能,据我所知。您可能希望在http://crbug.com/30885 上为以下错误报告加星标,以便在更新时引起注意。
如果您发现打开的标签页数为 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. 创建选项卡时增加 num_tabs:
chrome.tabs.onCreated.addListener(function(tab){
num_tabs++;
console.log("Tab created event caught. Open tabs #: " + num_tabs);
});
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();
});
添加浏览器关闭事件是一个非常频繁的请求。星http://crbug.com/30885更新。并阅读错误报告,了解一个聪明的黑客来检测浏览器何时通过按键关闭。
这个对我有用:
chrome.windows.onRemoved.addListener(function(windowId){
alert("!! Exiting the Browser !!");
});
它需要chrome.windows
而不是chrome.tabs
。
TL;DR:尝试window.onunload
事件,它适用于某些情况。
正如之前提到的,我们通常无法处理诸如onBrowserClose
事件之类的事情并阻止浏览器关闭。但对于一些情况下,我们可以使用window.onunload
事件做一些同步,并且它的工作是否真的同步。
根据我的经验,您至少可以:
- 在 HTML5
localStorage
(同步)中保存一些信息(例如日志)。 - 调用一些异步chrome扩展API函数却得不到结果。(它对我有用!耶!)
- 执行同步XMLHTTPRequest(是的,有时它有效)。
其它你可能感兴趣的问题