2012-02-27 74 views
9

我想使用addon-sdk將Chrome插件移植到Firefox,但我無法找到用於監聽選項卡導航事件的等效方法。Firefox addon-sdk - 監聽頁面導航

我需要做的就是保持數據每頁(從DOM檢測),併爲用戶導航到一個新的頁面中的標籤儘快刪除此(不過,維持對刷新數據)

我的Chrome,做一些事情時,標籤更改URL,我可以使用:

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

在Firefox中使用插件-SDK我已經嘗試使用:

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

的問題是,我不能掛接到我初始導航事件,所以在開始導航的用戶和準備好的新頁面的DOM之間,舊數據是可用的。

基本上我需要一種方法來掛鉤到一個標籤的初始導航,並理想地看到它的去向(就像我可以在Chrome中一樣)。

有什麼想法?

回答

11

目前沒有辦法檢測頁面加載標籤。但是,您可以使用page-mods中的開始事件來完成此操作。我也有興趣在此做了正確的方式,所以請ping通我,如果你覺得不使用頁面MODS的一種方式:

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

另外,我不知道該onAttach觸發的速度,所有消息都以ff擴展名傳遞,它可能會增加一些時間(也許是150ms?請回到我這裏,如果你有一個基準)

+0

感謝您的回答,我將不得不放棄。它看起來會做我想做的事(儘管以迂迴的方式)。希望FF能在未來實現更加正確的API。 – 2012-03-20 04:09:30

+2

@AdamHeath是的,Mozilla和Chromium的工作人員會同意使用一個通用的API來編寫規範的HTML5流程樣式。 – BenoitParis 2012-03-20 13:54:27

+1

最近測試了這個,做了這個工作,所以標記爲接受。謝謝 – 2012-04-09 07:21:41

0

據我所知,這應該捕獲所有打開標籤,切換在選項卡之間導航並在選項卡中導航。全局變量url應始終包含活動選項卡的url,並且console.log調用應記錄所有影響該活動選項卡的事件。

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」應該在console.log輸出之上。 – goelakash 2015-12-27 16:19:20