2

我尝试了一切,但似乎没有什么对我有用。我试图通过像下面的代码那样检测窗口关闭来检测浏览的关闭,但这对我不起作用。我做错了什么,是否有另一种检测 Chrome 关闭的解决方案?

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

3 回答 3

2

您的一般问题是退出浏览器意味着浏览器无法再运行您的脚本来检查它是否已经退出 - 这就像试图问一个人是否已经死了:答案(如果你得到一个)只是永远将是“不”。

您可能会尝试的一种解决方案是具有以下background权限的长时间运行的后台页面:

让 Chrome 早起晚关,让应用程序和扩展程序的寿命更长。

当任何已安装的托管应用程序、打包应用程序或扩展程序具有“后台”权限时,Chrome 会在用户登录其计算机后立即运行(不可见)——在用户启动 Chrome 之前。“后台”权限还使 Chrome 继续运行(即使在其最后一个窗口关闭后),直到用户明确退出 Chrome。

即使在所有浏览器窗口都关闭后,此权限也允许 Chrome 继续运行您的扩展程序。通常情况下,Chrome 只能在打开窗口的情况下进行操作,所以我们遇到了 Chrome 无法检测到所有窗口何时关闭的问题(如上所述)。有了后台权限,即使所有窗口都已关闭,Chrome 也可以保留运行扩展程序代码的能力。

于 2013-02-18T02:56:21.413 回答
0

我只是想在我的扩展程序退出而不是整个浏览器时获得控制权;我的扩展只使用一个文本框,所以我将它的 onblur 属性设置为一个函数并将我的退出代码放在那里;可能不是你要找的,但它对我有用!

chrome 开发者网站建议不要使用后台页面,因为“它们会消耗内存和其他资源”;

我同意一种更一致的方式来控制扩展退出将是有用的;它是一个看起来与 dom 集成在一起的 html 页面;

于 2013-02-25T19:41:25.597 回答
0

chrome 不提供任何 API 来检测 chrome 浏览器即将关闭。但是,当使用 chrome 扩展时,我们可以在后台页面中检测到 chrome 浏览器打开事件。

背景.js

    chrome.runtime.onStartup.addListener(function () {
        console.log("extension started: " + Date.now());
    });

chrome 浏览器启动时将触发此事件。接下来,您可以使用任何技巧来识别 chrome 浏览器是否退出。

于 2016-12-15T13:01:10.683 回答