2013-04-06 8 views
6

Sto tentando di convertire uno script Greasemonky ad un'estensione per Firefox e sto cercando di fare la mia estensione allegare automaticamente un semplice script per qualsiasi pagina web in cui una nuova scheda viene aperta. Sto convertendo lo script da Greasemonkey perché mi piacerebbe sfruttare le preferenze avanzate e le opzioni di menu.Come posso accedere all'oggetto della finestra di una nuova scheda? [In un'estensione per Firefox]

ho accedere alla scheda utilizza questo:

var container = gBrowser.tabContainer; 
container.addEventListener("TabOpen", tabAdded, false); 

function tabAdded(event) { 
var newtabwindow = event.target.____ //I don't know what goes here 
//attach script to newtabwindow 
} 

e il mio obiettivo è quello di aggiungere lo script per il documento nella nuova scheda una volta carica di utilizzare questa funzione:

function scriptrunner(targetwindow) { 
var myScript = targetwindow.content.document.createElement('script'); 
    myScript.type = 'text/javascript'; 
    myScript.setAttribute('src','chrome://addonname/content/addonscript.js'); 
    targetwindow.content.document.getElementsByTagName('head')[0].appendChild(myScript); 
} 

questa funzione è bene per collegare lo script alla pagina corrente quando collegato a un pulsante della barra degli strumenti con oncommand = "scriptrunner (finestra)", ma non so come potrei accedere alla finestra nella scheda appena aperta, o se dovrei ritagliare il finestra dall'equazione e accedere al documento in un altro modo.

+0

fa 'var = newtabwindow event.target;' non funziona? – Sukima

+2

Dalla tua descrizione sembra che il Mozilla [Add-on SDK] (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/) è più adatto per quel lavoro. È possibile utilizzare [pagina-mod] (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/page-mod.html) per fissare la trascrizione dei contenuti a qualsiasi pagina web in cui l'URL corrisponde a un modello, o utilizzare il modulo [linguette] (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/tabs.html). – ZER0

risposta

2

Si sta cercando contentWindow, che è una proprietà dell'elemento browser.

Dato un tab, chiamare gBrowser.getBrowserForTab per acquisire l'elemento browser associato allo tab. Quindi accedere sia contentDocument o contentWindow proprietà dell'elemento browser (questi sono equivalenti ai document e window oggetti si dovrebbe già avere familiarità con).

Inoltre, se non sbaglio, è necessario ascoltare l'evento "load" dello contentWindow oltre all'ascolto di eventi per lo tab.

+1

Ho trovato che gli esempi per [Caricamento pagina] (https://developer.mozilla.org/en-US/docs/Code_snippets/On_page_load) hanno rimosso la necessità di ascoltare l'evento TabOpen e sì, ho dovuto usare un carica il listener di eventi per la finestra. – user2253229

Problemi correlati