2011-10-18 55 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',因为这些变量*是*定义的。 –