2009-12-31 12 views
6

So..got extention scriptable per firefox. è somelika un webspider, scritto in javascript. cosa voglio fare:estensione firefox. Come prendere l'evento onload?

voglio caricare una pagina, fanno un po 'di lavoro, poi andare in un'altra pagina (usando un url dalla pagina caricata). Dopo aver caricato la nuova pagina, lo spider fa lo stesso lavoro.

Algoritm è somelike questo:

  1. aspettare la pagina viene caricata
  2. fare qualche lavoro
  3. scegliere un URL diverso
  4. andare a questo URL
  5. goto 1.

in m y funzione principale faccio questo codice:

gBrowser.addEventListener("DOMContentLoaded",haXahv8, false); 

e tutto funziona bene fino vado a un'altra pagina ... come posso riutilizzare evento DOMContentLoaded nella mia estensione per Firefox? Quindi, la domanda è: è possibile riutilizzare il carico/evento DOMContentLoaded in estensione firefox per pagine diverse? se sì allora come?

p.s. \ prima stavo risolvendo questo problema, em con i moduli di Windows e webbrowser + C++ ... ooh, che ora era ... un sogno! perché tutto ha funzionato bene =)

risposta

11

Devi solo registrarti per l'evento una volta e dovresti riceverlo ogni volta che viene attivato da una scheda del browser.

Il codice dovrebbe funzionare correttamente, a condizione che si sia in attesa che la finestra XUL attivi l'evento load prima di aggiungere un listener di eventi all'elemento gBrowser. Se stai aggiungendo un listener di eventi prima, gBrowser non è ancora inizializzato e il comportamento non è definito.

Ecco un esempio:

window.addEventListener('load', function() { 
    gBrowser.addEventListener('DOMContentLoaded', function() { 
     // stuff that happens for each web page load goes here 
    }, false); 
}, false); 

Si noti che, in pratica, posso solo essere sicuro che questo funziona con Firefox 3.5 e superiori. Ho scritto un'estensione (interna alla mia azienda) che fa questo genere di cose in modo affidabile per Firefox 1.5 fino a 3.5, ma sfortunatamente è un po 'più complicato (e fortunatamente) molto più robusto della soluzione di cui sopra. Se hai bisogno di supporto per più di Firefox 3.5+, fammi sapere e fornirò ulteriori informazioni.

Ecco qualche lettura supplementare:

2

L'ultimo parametro del metodo addEventListener(), che nel tuo caso è impostato su "false" deve essere impostato su true, questo indica al browser di licenziare il tuo eventhandler ogni volta che si verifica l'evento.

Il valore corrente false indica solo il licenziamento del gestore la prima volta che si verifica l'evento.

Spero di riuscire a salvare alcuni di voi là fuori un po 'di tempo, mi ci è voluto un po' di tempo a cercare nelle pagine degli eventi del modello di oggetti documento su W3C.org!

Problemi correlati