36

我已经尝试过 window.unload、window.beforeunload 等。我正在寻找一种方法来在弹出窗口关闭后通知我的背景页面。

4

6 回答 6

33

你可以试试这个。使用chrome.runtime.connect(或chrome.extension.connect在 Chrome 26 之前)连接到您的后台页面,并port.onDisconnect在弹出窗口关闭时在您的后台页面中触发。

于 2013-04-04T01:55:58.897 回答
9

可能是一种hacky方式,但在弹出页面中您可以收听

  window.onblur = function(){}

并向活动选项卡发送消息。

于 2018-04-15T15:15:34.587 回答
6

就这么简单:

// popup.js
chrome.runtime.connect({ name: "popup" });
// background.js
chrome.runtime.onConnect.addListener(function(port) {
    if (port.name === "popup") {
        port.onDisconnect.addListener(function() {
           console.log("popup has been closed")
        });
    }
});

请注意,在某些极端情况下此方法不起作用。例如,当打开弹出窗口然后使用键盘快捷键(例如 ctrl + t)切换选项卡时。

于 2021-01-04T13:31:00.160 回答
4

目前无法确定浏览器操作弹出窗口何时关闭,因为window.unonload在弹出窗口完成加载时立即触发,而不是在关闭时触发。为此有一个错误crbug.com/31262

这里很好地描述了三种可用的解决方法。它们包括技巧和从弹出窗口或背景页面port.onDisconnect定期轮询。chrome.extension.getViews()

于 2014-04-06T20:26:13.403 回答
1

我很惊讶没有人提到这一点(我已经在 Firefox Nightly 上对其进行了测试,并且它在那里工作):

window.addEventListener("pagehide", function(event) {
    console.log(event);
 });
于 2021-12-16T18:33:18.197 回答
0

终于找到了解决办法。将以下代码放入background.js/ eventPage.js

chrome.windows.onFocusChanged.addListener(function(window) {
    //handle close event
});
于 2017-11-29T06:08:49.643 回答