2010-02-23 6 views
15

Sto scrivendo un'estensione di google chrome con un popup e una pagina di sfondo. Il popup si iscrive a determinati eventi generati dallo sfondo e desidero annullare l'iscrizione a quegli eventi quando il popup scompare. Tuttavia, non vedo nessuno degli eventi onbeforeunload o onunload generati dal popup. Questi eventi sono stati licenziati? In caso contrario, qualche idea su come acquisire popup si chiude?onbeforeunload trigger per popup.html in un'estensione google chrome?

+1

Ho questa domanda esatta. Hai mai trovato una risposta? –

risposta

1

Ho avuto una specie di problema simile. Nel mio caso, ho messo a fuoco un elemento che era nella pagina popup. Quindi, quando il popup è chiuso, l'elemento perde la messa a fuoco e riesco a cogliere l'evento sfocato.

+0

Questo trucco non funziona per me - era davvero pieno di speranza - ma non andare. –

30

"beforeunload" è non attivato per i popup di azione del browser. Credimi, ci ho provato. "scaricare" dovrebbe essere licenziato correttamente, tuttavia, quindi ascoltalo.

In realtà, ho un sistema simile sul posto, che consente di allegare eventi utilizzando addEventListener e che vengono automaticamente eliminati quando si verifica l'evento di scarico.

Ecco un piccolo consiglio: ovviamente non è possibile utilizzare console.log, perché al momento dell'attivazione dell'evento di scaricamento, è già troppo tardi. Ma, si può fare questo:

var background = chrome.extension.getBackgroundPage(); 

addEventListener("unload", function (event) { 
    background.console.log(event.type); 
}, true); 

Utilizzando il codice di cui sopra, è possibile aprire la console di sfondo della pagina, che dovrebbe mostrare che l'evento di scaricamento viene generato correttamente.

+0

Grazie per il suggerimento della console in background! Abbastanza utile! –

+0

@AlexStack Ho ripristinato la modifica. 'chrome.runtime.getBackgroundPage' non è equivalente - è asincrono. – Xan

+0

Almeno con una pagina di evento e utilizzando 'chrome.runtime.getBackgroundPage()' per effettuare una chiamata alla pagina di sfondo per registrare qualcosa, non vedo questo lavoro per eventi 'download'. – jdunning

0

Se si è passati a utilizzare event pages anziché le pagine in background nell'estensione, il modo consigliato di accedervi è chiamare chrome.runtime.getBackgroundPage() con una funzione che viene richiamata con il riferimento della pagina di sfondo.

Tuttavia, se si tenta di ottenere lo sfondo della pagina in un onbeforeunload gestore, in questo modo:

document.addEventListener("beforeunload", function() { 
    chrome.runtime.getBackgroundPage(function(backgroundPage) { 
     backgroundPage.log("unloading"); 
    }); 
}); 

La richiamata non sembra sparare prima che la pagina scarica, in modo che log() chiamata non ha mai fatto.

In un commento sopra, Pauan ha suggerito di utilizzare chrome.extension.getBackgroundPage() per ottenere la pagina. L'unico modo per farlo funzionare era non creare il gestore con addEventListener(). Invece ho dovuto andare vecchia scuola e impostare il gestore direttamente sul window:

window.onbeforeunload = function() { 
    chrome.extension.getBackgroundPage().log("unloading"); 
}; 

che finalmente ottenuto attraverso la pagina di sfondo.