/ / Rozszerzenie Chrome: wykrywanie zamknięcia okna wyskakującego - rozszerzenie google-chrome, popup

Rozszerzenie Chrome: wykryj zamknięcie okna popup - google-chrome-extension, popup

W przypadku mojego rozszerzenia chrome chcę wykonać akcję, gdy wyskakujące okno przeglądarki browserAction zostanie zamknięte. Rozumiem, że żadne zdarzenia wbudowane nie są uruchamiane, gdy tak się dzieje. znalazłem ta sugestia aby otworzyć połączenie ze skryptem w tle, a następnie użyć połączenia port.onDisconnect zdarzenie do wykrycia zamknięcia okna podręcznego.

Jednak po zamknięciu wyskakującego okna w konsoli programisty pojawia się następujący błąd dla skryptu w tle:

(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)}

Skrypty, których używam są opisane poniżej.

Czy widzisz, gdzie się mylę?


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")
}
}
)

Odpowiedzi:

4 dla odpowiedzi № 1

onDisconnect nie jest własnością, ale obiektem, który zapewnia addListener metoda rejestracji wywołania zwrotnego:

externalPort.onDisconnect.addListener(function() {
var ignoreError = chrome.runtime.lastError;
console.log("onDisconnect");
});

2 dla odpowiedzi nr 2

Dla odniesienia, oto działająca wersja skryptu background.js:

chrome.runtime.onConnect.addListener(function (externalPort) {
externalPort.onDisconnect.addListener(function () {
console.log("onDisconnect")
// Do stuff that should happen when popup window closes here
})

console.log("onConnect")
})