对于我的Chrome扩展,我想在browserAction弹出窗口关闭时执行操作。我明白,发生这种情况时不会触发内置事件。我发现this suggestion用后台脚本打开连接,然后使用连接的port.onDisconnect
事件检测到弹出窗口正在关闭。Chrome扩展程序:检测弹出窗口关闭
然而,当弹出窗口关闭,我看到下面的错误在开发者控制台后台脚本:
(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")
}
}
)
的建议是在后台脚本中检测事件。该端口被断开*,因为弹出被破坏,因此没有事件侦听器在端口断开连接时被调用。 – wOxxOm
@wOxxOm正如你所建议的那样,我已经重写了我的裸骨扩展以在后台脚本中使用'port.onDisconnect'。但是,这只是将错误置换到弹出窗口关闭的时刻。 –
在这种情况下的错误是有记录的,并且可以通过简单的分配'var ignoreError = chrome.runtime.lastError'来忽略。重要的是断开监听器实际上会触发。 – wOxxOm