Je souhaite déclencher du code lorsque l'action de la page ou la fenêtre d'action du navigateur est fermée. J'ai essayé d'écouter onunload
et onbeforeunload
événements sur <body>
ou window
mais ils ne tirent jamais.Comment détecter quand la fenêtre d'action est fermée?
4
A
Répondre
6
C'est un bug, mais un développeur de chrome a posté une solution de contournement.
1
Comme il semble qu'il n'y a pas de solution simple, c'est ce que j'ai fini par faire si quelqu'un était intéressé.
Pointer périodiquement la page d'arrière-plan à partir de la fenêtre contextuelle, et si la page d'arrière-plan n'est pas reçue ping dans un délai donné, elle déclenche l'action requise. Fonctionne comme une bombe à retardement :)
Dans la page d'arrière-plan:
var timeoutId = 0;
function popupPing() {
if(timeoutId != 0) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(function() {
popupClosed();
timeoutId = 0;
}, 1000);
}
function popupClosed() {
//...
}
dans une fenêtre:
ping();
function ping() {
chrome.extension.getBackgroundPage().popupPing();
setTimeout(ping, 500);
}
(notez que pop-up pings 2 fois plus rapide que le temps "déclencheur" dans la page d'arrière-plan)
Bien que j'espère vraiment qu'il ya une meilleure réponse (et s'il n'y a pas, nous devrions déposer un bug), c'est un hack assez cool. Une sorte d'interrupteur de l'homme mort: http://en.wikipedia.org/wiki/Dead_man's_switch – npdoty