Можно ли узнать целевой DOMWindow для HTTPRequest?
Я разрабатываю расширение для Firefox, которое требует от меня перехвата загрузки страниц путем фильтрации некоторых HTTP-запросов. Я сделал это, используя инструкции, приведенные здесь. Обратите внимание, что мой вопрос опирается на содержание этой ссылки.
Я использовал метод, приведенный в разделе HTTPObservers. И это сработало, я действительно могу извлечь соответствующие URL отправляемых запросов.
Тем не менее, еще одна вещь, которая мне действительно нужна, - это получить целевое окно DOM, в которое должно было быть загружено содержимое, относящееся к HTTPRequest. Возможно ли использовать HTTPObservers?
В приведенной выше ссылке другой способ был описан с использованием WebProgressListeners.
Я тоже это попробовал. Метод onLocationChange () возвращает только изменения местоположения в строке URL. Возможно ли каким-то образом получить URL-адреса HTTPRequest с помощью любого из этих обработчиков прогресса? Потому что если так, то, если я правильно понимаю, aWebProgress.DOM Window выдаст мне окно, которое мне нужно.
Примечание: я использую gwt для расширения и JSNI для вышеупомянутой части.
1 ответ
Обычно вы можете сделать это с помощью nsILoadContext
интерфейс (к сожалению, едва документированный) подключен к запросу или его группе загрузки. Вот как вы это сделаете:
function getWindowForRequest(request)
{
if (request instanceof Components.interfaces.nsIRequest)
{
try
{
if (request.notificationCallbacks)
{
return request.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
}
} catch(e) {}
try
{
if (request.loadGroup && request.loadGroup.notificationCallbacks)
{
return request.loadGroup.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
}
} catch(e) {}
}
return null;
}
Обратите внимание, что эта функция должна возвращать null
иногда - не каждый HTTP-запрос связан с окном.