2012-02-27 14 views
9

Próbuję przenieść wtyczkę Chrome do Firefoksa za pomocą dodatku addon-sdk i nie mogę znaleźć równoważnej metody do słuchania zdarzeń nawigacji po karcie.Firefox addon-sdk - posłuchaj nawigacji strony

Co muszę zrobić, to zachować dane na stronie (wykrytej z DOM) i usunąć to tak szybko, jak użytkownik przechodzi do nowej strony w zakładce (ale zachować dane dotyczące odświeżania)

I Chrome, aby coś zrobić, gdy zakładka zmienia adres URL, można użyć:

chrome.tabs.onUpdated.addListener(function(tab_id, changeInfo, tab) { 
    if(changeInfo.status == 'loading' && changeInfo.url) { 
     //DO STUFF AS THE URL CHANGED 
    } 
}); 

W Firefoksie za pomocą dodatku-sdk próbowałem, używając:

tabs.on('open', function(tab){ 
    tab.on('ready', function(tab){ 
    if(tab.cachedURL != tab.url) { 
     //DO STUFF AND SET CACHE 
    } 
    }); 
}); 

problem polega na tym, że nie mogę podpiąć do i Nawigacja nitialna, więc pomiędzy początkową nawigacją użytkownika a DOM nowej strony jest już gotowa, stare dane są dostępne.

Zasadniczo potrzebuję sposobu, aby podłączyć się do początkowej nawigacji w zakładce i idealnie zobaczyć, dokąd zmierza (tak jak mogę w Chrome).

Jakieś myśli?

Odpowiedz

11

W tej chwili nie ma sposobu, aby wykryć ładowanie stron za pomocą kart. Można to jednak zrobić za pomocą zdarzenia startowego w module strony. Jestem również zainteresowany w ten sposób odpowiedni sposób, więc proszę mnie ping jeśli znajdziesz sposób bez użycia page-modów:

var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: "*", // All DOM windows (ie. all pages + all iframes). 
    contentScriptWhen: "start", // page starts loading, at this point you have 
           // the head of the document and no more 
    contentScript: "", // inject no script, you can even omit this 
    onAttach: function onAttach(worker) { 
      if (worker.tab.url == worker.url) // test if at top level 
       doStuff(worker.tab.url); 
      // cleanup the attached worker 
      worker.destroy(); 
     } 
    } 
); 

Także nie wiem o prędkości spustu onAttach, jak z całą wiadomością przekazywaną w rozszerzeniach ff, może dodać trochę czasu (może 150ms? proszę wróć do mnie, jeśli masz benchmark na tym)

+0

Dzięki za odpowiedź, będę musiał dać temu szansę. Wygląda na to, że zrobi to, co chcę (choć w okrężny sposób). Mam nadzieję, że FF zaimplementuje w przyszłości bardziej poprawne API. –

+2

@AdamHeath Tak, byłoby wspaniale, że Mozilla i ludzie z Chromium zgadzają się na wspólny API, pisząc styl specyfikacji HTML5. – BenoitParis

+1

Przetestowałem to niedawno, wykonuję zadanie, więc oznaczenie jako zaakceptowane. Dzięki –

0

O ile mi wiadomo, powinno to uchwycić wszystkie przypadki otwierania kart, przełączania między kartami i poruszanie się po kartach. Zmienna globalna url powinna zawsze zawierać adres URL aktywnej karty, a wywołanie console.log powinno rejestrować wszystkie zdarzenia, które mają na to wpływ.

var tabs = require("sdk/tabs"); 
var url; 

var updateURL = function (tab) { 
    var oldURL = url; 
    url = tab.url; 
    console.log(oldURL+" --> "+url); 
}; 

tabs.on("activate", updateURL); 
tabs.on("pageshow", updateURL); 

updateURL(tabs.activeTab); 
+1

Myślę, że wiersz "url = tab.url" powinien znajdować się powyżej wyjścia console.log. – goelakash

Powiązane problemy