Можно ли узнать целевой DOMWindow для HTTPRequest?

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

Я использовал метод, приведенный в разделеHTTPObservers, И это сработало, я действительно могу извлечь соответствующие URL отправляемых запросов.

Тем не менее, еще одна вещь, которая мне действительно нужна, это получить целевое окно DOM, в которое должно было быть загружено содержимое, относящееся к HTTPRequest. Возможно ли использовать HTTPObservers?

В ссылке выше, другой способ был описан с использованиемWebProgressListeners.

Я тоже это попробовал. Метод onLocationChange () возвращает только изменения местоположения в строке URL. Возможно ли каким-то образом получить URL-адреса HTTPRequest с помощью любого из этих обработчиков прогресса? Потому что если это так, то, если я правильно понимаю, aWebProgress.DOMWindow даст мне окно, которое мне нужно.

Примечание: я использую gwt для расширения и JSNI для вышеупомянутой части.

Ответы на вопрос(1)

Решение Вопроса

Обычно вы можете сделать это с помощьюnsILoadContext interface (к сожалению, едва задокументировано) прикреплен к запросу или его группе загрузки. Вот как вы это сделаете:

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-запрос связан с окном.

Ваш ответ на вопрос