2013-08-07 3 views
2

Я пытаюсь захватить и обрабатывать каждый запрос веб-страницы, или плагин, который он собирается сделать. Например, если вы откроете консоль и включите ведение журнала в сети, когда HTTP-запрос будет отправлен, консоль покажет его там. Я хочу захватить каждую ссылку и вызвать свою функцию, даже когда видео загружается флеш-плеером (который также входит в консоль, если это http). Может ли кто-нибудь вести меня, что я должен делать, или где я должен начать?Как обрабатывать каждый запрос в расширении Firefox?

Редактировать: Я хочу, чтобы иметь возможность отменить запрос и обработать его по мере необходимости.

ответ

10

Вы можете использовать SDK Jetpack, чтобы получить большую часть того, что вам нужно, я считаю. Если вы зарегистрируетесь system events и слушать http-on-modify-request, вы можете использовать методы nsIHttpChannel для modify ответ и запрос

let { Ci } = require('chrome'); 
let { on } = require('sdk/system/events'); 
let { newURI } = require('sdk/url/utils'); 

on('http-on-modify-request', function ({subject, type, data}) { 
    if (/google/.test(subject.URI.spec)) { 
    subject.QueryInterface(Ci.nsIHttpChannel); 
    subject.redirectTo(newURI('http://mozilla.org')); 
    } 
}); 

Дополнительная информация «Intercepting Page Loads»

+2

для правильной работы, третий параметр должен быть передан на (true), чтобы сохранить сильную ссылку. В противном случае сохраняется только слабая ссылка на функцию, и поскольку функция представляет собой сбор мусора, событие больше не запускается –

2

не версия SDK и многое другое управления и подробно : Это позволяет вам также взглянуть на флаги, чтобы вы могли смотреть только LOAD_DOCUMENT_URI, которые являются рамками и основным окном. Главное окно всегда LOAD_INITIAL_DOCUMENT_URI

https://github.com/Noitidart/demo-on-http-examine

https://github.com/Noitidart/demo-nsITraceableChannel - в этом, вы можете увидеть источник, прежде чем он обрабатывается браузером

в этих примерах вы видите, как получить contentWindow и browserWindow от субъекта а также вы можете применить это к примеру sdk, просто используйте «subject»

также я предпочитаю использовать http-on-study-response, даже в версии sdk. потому что в противном случае вы увидите все страницы, на которые он перенаправляет FROM, а не окончательное перенаправление TO. скажем, url blah.com перенаправляет вас на blah.com/1, а затем blah.com/2

только у blah.com/2 есть документ, поэтому вы можете изменить blah.com и blah.com/1, они будут иметь флаги LOAD_REPLACE, как правило, они перенаправляют сразу, поэтому документ никогда не отображается, если он является перенаправлением по времени, вы увидите документ, а также увидите флаг LOAD_INITIAL_DOCUMENT_URI, я думаю, что я сам не испытал его.

Смежные вопросы