2011-10-18 58 views
1

我使用的代碼Firefox擴展觀察響應

// This is an active module of the goelvivek (8) Add-on 
exports.main = function() { 
    var httpRequestObserver = 
    { 
    observe: function(subject, topic, data) 
    { 
     if (topic == "http-on-examine-response") { 
     if(console) 
      console.log(data); 
     } 
    } 
    }; 
    var {Cc, Ci, Cr} = require("chrome"); 
    var observer = require("observer-service"); 
    observerService = Components.classes["@mozilla.org/observer-service;1"]. 
    getService(Components.interfaces.nsIObserverService); 
    observerService.addObserver(httpRequestObserver, "http-on-examine-response", false); 
}; 

努力,但線console.log(data);不打印在控制檯日誌中的任何事情。爲什麼?

+0

您是否使用以下解決方案獲取數據?如果是這樣,你可以請更新上面的代碼,因爲我試圖粘貼相同的代碼在main.js中進行了下面的修改,但我沒有得到任何東西在console.log – user1275375

回答

4

除了Nickolay提到的問題之外,觀察者需要實現QueryInterface()函數(通常通過XPCOMUtils.generateQI())。下面是一個如何與加載項SDK做到這一點:

var {Cc, Ci, Cr, Cu} = require("chrome"); 
var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 
var httpRequestObserver = 
{ 
    QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]), 
    ... 
}; 

不過,既然你已經要求observer-service package,它會更容易使用它:

var observer = require("observer-service"); 
observer.add("http-on-examine-response", onHttpRequest); 

function onHttpRequest(subject, data) 
{ 
    ... 
} 

這種方法的缺點是observer-service是一個內部軟件包,其API可能會在將來的附加SDK版本中更改。

+0

我嘗試了包含你的代碼的上面的例子,但我沒有得到輸出。 – user1275375

+0

@ user1275375:隨意查看錯誤控制檯,而不是說明「無輸出」。此處的代碼在Add-on SDK模塊的上下文中正常工作。您可能在內容腳本或其他不適用的上下文中運行它。 –

+0

我剛剛在附加組件構建器中創建了一個新的附加組件,並將此代碼包含在main.js中。至於錯誤,我沒有在錯誤控制檯中找到任何錯誤。 – user1275375

0

這是真正的片段嗎?您應該在錯誤控制檯中看到有關Components未定義的錯誤。從require('chrome')得到它或使用require("observer-service")中的對象。

+1

其實,更好的建議可能是使用'Cc'而不是' Components.classes'和'Ci'而不是'Components.interfaces',因爲這些變量*是*定義的。 –