2013-04-06 12 views
6

Próbuję przekonwertować skrypt Greasemonky na rozszerzenie dla Firefoksa i próbuję uczynić moje rozszerzenie automatycznie dołączać prosty skrypt do dowolnej strony internetowej po otwarciu nowej karty. Przekształcam skrypt z Greasemonkey, ponieważ chciałbym skorzystać z zaawansowanych preferencji i opcji menu.Jak uzyskać dostęp do obiektu okna nowo otwartej karty? [w rozszerzeniu firefox]

mogę uzyskać dostęp do karty za pomocą tego:

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 
} 

i moim celem jest, aby dołączyć skrypt do dokumentu w nowej karcie raz ładuje użyciem tej funkcji:

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

Ta funkcja działa dobrze, aby dołączyć skrypt do bieżącej strony, gdy jest on dołączony do przycisku paska narzędziowego z poleceniem oncommand = "scriptrunner (okno)", ale nie wiem, w jaki sposób mogłem uzyskać dostęp do okna w nowo otwartej karcie lub czy powinienem wyciąć okno z równania i dostęp do dokumentu w inny sposób.

+0

Czy 'var newtabwindow = event.target;' nie działa? – Sukima

+2

Z twojego opisu wydaje się, że Mozilla [Add-on SDK] (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/) jest bardziej odpowiednia dla tego zadania. Możesz użyć [page-mod] (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/page-mod.html), aby dołączyć skrypt do dowolnej strony internetowej, gdzie URL pasuje do wzorca lub użyj modułu [tabs] (https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/tabs.html). – ZER0

Odpowiedz

2

Szukasz contentWindow, która jest własnością elementu browser.

Po otrzymaniu numeru tab należy zadzwonić pod numer gBrowser.getBrowserForTab w celu uzyskania elementu browser powiązanego z tab. Następnie należy uzyskać dostęp do właściwości contentDocument lub contentWindow elementu browser (są one równoważne obiektom document i window, które powinny być już znane).

Ponadto, jeśli się nie mylę, oprócz odsłuchu zdarzeń związanych z tab trzeba również posłuchać zdarzenia "load" z contentWindow.

+1

Stwierdziłem, że przykłady dla [On page load] (https://developer.mozilla.org/en-US/docs/Code_snippets/On_page_load) usunęły potrzebę nasłuchiwania zdarzenia TabOpen i tak, musiałem użyć wczytaj detektor zdarzeń dla okna. – user2253229

Powiązane problemy