4

我正在使用'FF Addon SDK'將Chrome擴展移植到FF。在後臺腳本(main.js)文件,我需要使用FF相當於...檢測FF添加中的導航

chrome.webNavigation.onBeforeNavigate.addListener() 

chrome.tabs.onUpdated.addListener() 

我注意到,要求( 「SDK /標籤」)。在只有打開,關閉,完成等,但與導航無關。

我看到一些解決方案使用Page-Mod或顯示解決方案的舊XUL開發FF擴展的方式。我特別尋找FF Addon SDK(唯一)解決方案。

欣賞任何輸入。

編輯:我能夠通過使用Progress Listener找出chrome.tabs.onUpdated.addListener()的替代方法。顯然,在FF中它被稱爲onLocationChange。仍在尋找替代chrome.webNavigation.onBeforeNavigate.addListener()

回答

1

好吧,我設法弄清楚了。我們需要使用onStateChange偵聽器。要模仿onBeforeNavigation,我們不僅需要檢查STATE_START,還需要檢查STATE_IS_DOCUMENT。

var progressListener = { 
    QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]), 

    onLocationChange: function(aWebProgress, aRequest, aURI) { 
     if (aRequest && aURI) { 
      console.log('onLocationChange: ' + aURI.spec); 
     } 
    }, 

    onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) { 
     var status = Ci.nsIWebProgressListener; 

     if(aStateFlags&status.STATE_START && aStateFlags&status.STATE_IS_DOCUMENT) { 
      console.log('onStateChange: ' + aRequest.QueryInterface(Ci.nsIChannel).originalURI.spec); 
     } 
    } 
}; 
1

不幸的是,沒有任何合適的替代chrome.webNavigation.onBeforeNavigate.addListener()。 一週前發現自己處於相同的狀況。使用nsIWebProgressListener.onStateChange嘗試STATE_START。沒有按預期工作。 你最好的選擇是: 1.)使用onLocationChange事件,它會給你正在加載的位置的URI。 2.)攔截Httprequest。過濾掉頂層的一個,並在開始航海時調用它。

讓我知道你是否找到其他方法。

+0

我也使用onLocationChange,但它似乎比Chrome中的onBeforeNavigate慢得多。你可以提供更多的細節或攔截HttpRequest的示例代碼。 –

+1

參考此文檔:https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Tabbed_browser#Getting_the_tab_that_fires_the_http-on-modify-request_notification。沒有可用的附加sdk方法。你需要移植這個例子來使用js-xpcom – Nandu

0

你可以從你的framescript附加onBeforeUnload/onUnload事件。