对于我的Chrome扩展程序,我希望在browserAction弹出窗口关闭时执行某个操作。我了解到没有内置事件会在此时触发。我找到了this suggestion来打开与后台脚本的连接,然后使用连接的
然而,当弹出窗口关闭时,我在后台脚本的开发人员控制台中看到以下错误:
下面是我使用的脚本。
你能看出我哪里出错了吗?
port.onDisconnect
事件来检测弹出窗口是否关闭。然而,当弹出窗口关闭时,我在后台脚本的开发人员控制台中看到以下错误:
(BLESSED_EXTENSION context for glkehflnlfekdijfhacccflbffbjhgbd) extensions::messaging:102: Uncaught TypeError: Cannot read property 'destroy_' of undefined{TypeError: Cannot read property 'destroy_' of undefined
at PortImpl.destroy_ (extensions::messaging:102:37)
at dispatchOnDisconnect (extensions::messaging:322:29)}
下面是我使用的脚本。
你能看出我哪里出错了吗?
manifest.json
{ "manifest_version": 2
, "name": "Detect when popup closes"
, "version": "0.1"
, "browser_action": {
"default_icon": "popup.png"
, "default_popup": "popup.html"
}
, "background": {
"scripts": [
"background.js"
]
}
}
popup.html
<!DOCTYPE html>
<body>
<h1>Test</h1>
<script src="popup.js"></script>
</body>
</html>
popup.js
var port = chrome.runtime.connect()
background.js
chrome.runtime.onConnect.addListener(function (externalPort) {
externalPort.onDisconnect = function () {
try {
var ignoreError = chrome.runtime.lastError
} catch (error) {
console.log("onDisconnect")
}
}
)
port.onDisconnect
在后台脚本中,正如你所建议的那样。然而,这只是将错误转移到弹出窗口关闭的时刻。 - James Newtonvar ignoreError = chrome.runtime.lastError
忽略。重要的是断开连接监听器实际上会触发。 - wOxxOm