firefox addon webrequest.addListener行为不端

时间:2015-10-16 20:27:24

标签: firefox-addon firefox-addon-sdk

我想在firefox的扩展中检查http请求。为了开始弄清楚如何做我想做的事情,我想我只需记录所有内容,看看会出现什么:

webRequest.onResponseStarted.addListener(
  (stuff) => {console.log(stuff);},
  {urls: [/^.*$/]}
);

域名无关紧要,我知道正则表达式可以在控制台中验证。运行此代码时,我没有记录。当我拿出过滤器参数时,我得到了每个请求:

webRequest.onResponseStarted.addListener(
  (stuff) => {console.log(stuff);}
);

很酷,我可能做错了什么,但我看不清楚。

另一种方法是自行手动过滤:

var webRequest = Components.utils.import("resource://gre/modules/WebRequest.jsm", {});
var makeRequest = function(type) {
  webRequest[type].addListener(
    (stuff) => {
      console.log(!stuff.url.match(/google.com.*/));
      if(!stuff.url.match(/google.com.*/))
        return;
      console.log(type);
      console.log(stuff);
    }
  );
}
makeRequest("onBeforeRequest");
makeRequest("onBeforeSentHeaders");
makeRequest("onSendHeaders");
makeRequest("onHeadersReceived");
makeRequest("onResponseStarted");
makeRequest("onCompleted");

使用上面if的console.log,我可以看到正则表达式在我想要的时候返回true,并且代码使它超过if。当我删除上面的console.log时if if不再执行。

我的问题是,如何让过滤参数起作用或者如果确实破坏了,我怎样才能让代码超过if执行?显然,这是一个消防水带,为了开始寻找解决方案,我需要减少数据。

由于

1 个答案:

答案 0 :(得分:0)

urls必须是match patterns的字符串或数组。不支持正则表达式。

WebRequest.jsm使用resource://gre/modules/MatchPattern.jsm。有人可能会对util/match-pattern附加sdk api感到困惑,因为它支持正则表达式。