2015-10-16 2 views
0

Я хочу изучить http-запросы в расширении для firefox. Для начала выяснить, как сделать то, что я хочу сделать, я решил просто войти все и посмотреть, что идет вверх:firefox addon webrequest.addListener misbehaving

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"); 

С console.log над если я могу видеть регулярное выражение возвращает истину, когда я хочу, чтобы и код, что делает его мимо, если , Когда я удаляю console.log выше, если if, если больше не выполняется.

Мой вопрос в том, как мне заставить параметр фильтрации работать, или если это действительно сломано, как я могу получить код мимо if, который должен быть выполнен? Очевидно, что это пожарный шланг, и чтобы начать поиск решения, мне нужно будет уменьшить данные.

Благодаря

ответ

0

urls должен быть строкой или массивом match patterns. Регулярные выражения не поддерживаются.

WebRequest.jsm использует resource://gre/modules/MatchPattern.jsm. Кто-то может запутаться с дополнительным sdk api util/match-pattern, который поддерживает регулярные выражения.

+0

Из документации по адресу https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/WebRequest.jsm#onBeforeRequest. Это указывает, что URL-адреса являются «массивом RegExp». Это довольно ясно. В любом случае я попробовал ваши шаблоны совпадений из Google, не повезло. Похоже, что регистрация до того, как я это сделаю, позволяет регистрироваться внутри запроса, я просто не знаю, действительно ли это делает то, что я хочу. – Dale