是否有关于Chrome扩展程序弹出窗口关闭的事件?

时间:2013-04-03 21:31:05

标签: google-chrome-extension

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

5 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:4)

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

  window.onblur = function(){}

并向活动标签发送消息。

答案 2 :(得分:3)

就这么简单:

// 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)切换选项卡时。

答案 3 :(得分:2)

目前无法确定浏览器操作弹出窗口的时间 弹出窗口结束后立即触发关闭window.unonload 装货,而不是在它关闭时。这有一个错误crbug.com/31262

可用的三种解决方法是well described here。它们包括port.onDisconnect技巧,并定期从弹出窗口或后台页面汇集chrome.extension.getViews()

答案 4 :(得分:0)

终于找到了解决方案。将以下代码放在background.js / eventPage.js

chrome.windows.onFocusChanged.addListener(function(window) {
    //handle close event
});