2012-02-27 26 views
9

Addon-sdk'yi kullanarak bir Chrome eklentisini Firefox'a aktarmaya çalışıyorum ve sekme gezinme olaylarını dinlemek için eşdeğer bir yöntem bulamıyorum. Yapmam gereken şeyFirefox addon-sdk - sayfa gezinmeyi dinle

(DOM algılandı) sayfa başına veri tutmak ve kullanıcı sekmesine yeni sayfaya gider en kısa sürede bu kaldırmak (ancak, yenileme verileri korumak)

olduğunu bir sekme URL'sini değiştirdiğinde Chrome, bir şeyler yapmak, ben kullanabilirsiniz:

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

Firefox'ta kullanıyorum denedim addon-sdk kullanarak:

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

sorun ben içine kanca edemezler ben nitial navigasyon olayı, böylece kullanıcının navigasyona başlaması ile yeni sayfanın DOM'ı hazır olmakta, eski veriler mevcuttur.

Temel olarak, bir sekmenin ilk navigasyonuna bağlanmanın ve ideal olarak nereye gittiğini görmenin bir yoluna ihtiyacım var (tıpkı Chrome'da yaptığım gibi).

Herhangi bir düşünce?

cevap

11

Şu anda, sekmelerle sayfa yükleme algılamanın bir yolu yoktur. Ancak, bunu sayfa modlarında başlangıç ​​olayı ile yapabilirsiniz. Ayrıca

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

olarak, ben onAttach tetik hızı hakkında bilmiyorum: Eğer sayfa mods kullanmadan bir yol bulmak eğer ben de bu hak bir şekilde yapmak isteyen değilim, bu yüzden beni ping lütfen ff uzantılı tüm iletilerle birlikte, biraz zaman ekleyebiliriz (belki de 150ms? bu konuda bir ölçüt varsa lütfen bana dönün)

+0

Cevabınız için teşekkürler, bunu vermem gerekecek. İstediğimi yapacağım gibi görünüyor (dolambaçlı bir şekilde de olsa). Umarım FF gelecekte daha doğru bir API uygulayacaktır. –

+2

@AdamHeath Evet, Mozilla ve Chromium'daki adamların, HTML5 işlem stilini belirten ortak bir API üzerinde hemfikir olması harika olurdu. – BenoitParis

+1

Bunu yakın zamanda test ettim, iş yapıyor, yani kabul edildi olarak işaretleniyor. Teşekkürler –

0

Bildiğim kadarıyla, bu, tüm açılış sekmeleri, anahtarlama durumlarını yakalamalıdır. sekmeler arasında ve sekmeler arasında gezinme. Küresel değişken url, etkin sekmenin URL'sini her zaman içermelidir ve console.log çağrısı, bunu etkileyen tüm olayları günlüğe kaydetmelidir.

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

"url = tab.url" satırının, console.log çıktısının üstünde olması gerektiğini düşünüyorum. – goelakash