我已经尝试过 window.unload、window.beforeunload 等方法。 我正在寻找一种在弹出窗口关闭后通知我的后台页面的方法。
我已经尝试过 window.unload、window.beforeunload 等方法。 我正在寻找一种在弹出窗口关闭后通知我的后台页面的方法。
chrome.extension.connect
)连接到你的背景页面,当弹出窗口关闭时,port.onDisconnect
将在你的背景页面中触发。port.onDisconnect
会在插件被移除/删除时触发,而不是当用户停止使用并关闭弹出窗口时。 - Mudlabs// 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")
});
}
});
也许这是一个不太正式的方法,但在弹出页面中,您可以监听到
window.onblur = function(){}
目前没有办法判断浏览器操作弹出窗口何时关闭,因为 window.unonload
会在弹出窗口完成加载后立即触发,而不是在关闭时触发。有一个与此相关的 bug crbug.com/31262。
三种可用的解决方法在这里有详细描述。它们包括使用 port.onDisconnect
技巧以及从弹出窗口或后台页面定期轮询 chrome.extension.getViews()
。
我很惊讶没有人提到这个(我在Firefox Nightly上进行了测试,它可以工作):
window.addEventListener("pagehide", function(event) {
console.log(event);
});
visibilitychange
事件,但它的效果不一致。回到 port.onDisconnect hack。 - Dmitry Davydovdocument.addEventListener('visibilitychange', MyFunction, false);
chrome.runtime.connect();
onConnect
监听事件。chrome.runtime.onConnect.addListener(port => {
port.onDisconnect.addListener(()=>{
//Your event will be fired in here
})
})
终于找到了解决方案。将以下代码放入background.js
/eventPage.js
中:
chrome.windows.onFocusChanged.addListener(function(window) {
//handle close event
});
chrome.tabs.onRemoved
或者如果它算作一个窗口的话,也可以尝试chrome.windows.onRemoved
吗? - BeardFist