我正在尝试使用代码
// 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 :(得分: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版本中发生变化。
答案 1 :(得分:0)
这是真正的片段吗?您应该会在错误控制台中看到有关Components
未定义的错误。要么从require('chrome')
获取,要么使用require("observer-service")
中的对象。