通过sdk / system / events测试http-on-modify-request观察者?

时间:2016-05-12 13:14:31

标签: javascript events firefox-addon-sdk

是否可以测试http-on-modify-request - 观察者?

events module提供emit(type, event)方法来创建Firefox事件。要测试收听http-on-modify-request的模块,您可以将类型设置为http-on-modify-request。问题是如何设置event参数以模仿网络请求?文档说明

  

event:object
具有数据和主题属性的可选对象。 data是指您想要传递的字符串   通过这个活动。主题应指实际的演员/主题   此事件(即:发出事件的对象)。

设置event.data作为观察者的data参数传递,f.ex相同。一个字符串作为event.subject,但当我尝试传递一个带有QueryInterface - 函数的对象时,它不起作用:

events.emit("http-on-modify-request", {"subject": {
    QueryInterface : function() {
        return {"URI": {"spec": 'mock://URI.spec'}}
    }}});

要测试的代码与https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/system_events非常相似。

@ humanoid的使用答案

obs.notifyObservers(
    { QueryInterface : function() {
        return {"URI": NetUtil.newURI("mock://URI.spec") };
    }},
    "http-on-modify-request",
    null);

失败
  

JavaScript错误:“NS_NOINTERFACE:组件返回失败代码:   0x80004002(NS_NOINTERFACE)[nsISupports.QueryInterface]“{file:   “resource://gre/modules/commonjs/toolkit/loader.js - >   资源://addon-id/caller.js“line:xy}]

1 个答案:

答案 0 :(得分:1)

来自emit的{​​{1}}方法对于创建看起来像来自Firefox的通知的观察者通知没有用,因为它添加了包装以确保弱引用。

相反,我建议使用"vanilla" observer service,例如来自sdk/system/events

Services.jsm