2013-02-18 91 views
2

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

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

你试过这个解决方案吗? http://stackoverflow.com/questions/9961544/chrome-detect-when-browser-exits – Danilo 2013-02-18 01:19:49

+0

我当然做到了。什么都没有我不得不提一下,如果从我试图检测Chrome退出扩展程序的代码中看不到这种情况。 – user436390 2013-02-18 01:55:16

回答

2

你一般的问题是,退出浏览器意味着浏览器可以不再运行脚本,以检查它是否已经退出,但 - 这就像问一个人,如果他们已经死了:答案(若你得到一个)只会是“不”。

一个解决方案,你可以尝试与background permission一个长期运行的背景页:

能让Chrome浏览器启动得早,并关闭较晚,从而使应用程序和扩展可以拥有更长的使用寿命。

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

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

+0

“背景许可”是什么意思?你的意思是这样的背景持久性:“背景”:{“persistent”:true,...} – user436390 2013-02-18 03:22:16

+2

@ user436390对不起,我使用了错误的链接!不,该权限实际上称为“背景”(请参阅​​更新的链接),它与持久性不同。 – apsillers 2013-02-18 03:42:57

+0

谢谢,我会尽力并尽快报告。 – user436390 2013-02-18 03:58:04

0

我只是想控制当我的扩展退出不是整个浏览器;我的扩展名专门使用了一个文本框,所以我将它的onblur属性设置为一个函数并在那里放置了我的退出代码;可能不是你要找的东西,但它适用于我!

铬开发者网站建议由于“消耗的内存和其他资源”而不使用后台页面;

我同意一个更一致的方式来控制扩展退出将是有用的;它是一个html页面,否则它似乎与dom结合在一起;

0

铬不提供任何API来检测铬浏览器正在关闭。但是,使用Chrome扩展时,我们可以在背景页面内检测Chrome浏览器打开事件。

background.js

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

此事件将触发时,Chrome浏览器将启动。接下来您可以使用任何技巧来确定Chrome浏览器已退出。