Wpis z mikrobloga

Jak zrobić żeby funkcja ładowała się do każdego otwartego okna i do każdego otwierającego się okna?
Moja metoda jest prosta, zwykła pętla po oknach i przyczepienie funkcji do eventu open ale mam wrażenie, że to coś zamula, moje rozszerzenia, mimo że dosyć proste to i tak Fx wykrywa jako zamulające.
Co zrobić?

#firefox #addons #javascript
  • 4
@look997: Przy uruchomieniu przeglądarki (warto nieraz poczekać nawet chwilkę, jeśli nie jest to konieczne - Firefox będzie miał nieco mniej roboty przy uruchamianiu) przeiterować przez wszystkie okna i dodać listener.
onTrack


@look997: Nie znam tego akurat, nigdy o tym nie słyszałem.
Generalnie skorzystaj z tego interfejsu nsIWindowMediator. Jest on dostępny także w Services.jsm. Tam jest też przykład jak dodać listener na otwarcie okna.
Iterację robisz w ten sposób (o ile dobrze pamiętam).
let enumerator = Services.wm.getEnumerator("navigator:browser"); (ewentualnie getXULWindowEnumerator, jeśli potrzebujesz xulowego okna.
while(enumerator.hasMoreElements())
enumerator.getNext();
+ Jeśli chcesz otwarte okno przerobić na nsIDOMWindow (zakładam, że o to Tobie chodzi) to dajesz otwarteOkno.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);