我已经尝试过 window.unload、window.beforeunload 等。我正在寻找一种方法来在弹出窗口关闭后通知我的背景页面。
问问题
16767 次
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 回答