對於我的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