是否有可能知道HTTPRequest的目标DOMWindow?

时间:2012-05-23 12:09:15

标签: javascript gwt firefox-addon httprequest

我正在开发一个firefox扩展,它要求我通过过滤掉一些HTTPRequests来拦截页面加载。 我使用here给出的说明做到了这一点。请注意,我的问题来自此链接的内容。

我使用HTTPObservers部分给出的方法。它确实有效,我确实能够提取发出的请求的相应网址。

然而,我真正需要的另一件事是获取目标DOM窗口,其中将加载与HTTPRequest相关的内容。是否可以使用HTTPObservers?

在上面的链接中,使用WebProgressListeners描述了另一种方式。

我也试过了。 onLocationChange()方法仅返回url栏中的位置更改。是否有可能使用任何这些进度监听器获取HTTPRequest URL?因为如果是这样,那么如果我理解正确,aWebProgress.DOMWindow会给我我需要的窗口。

注意:我使用gwt作为扩展,使用JSNI作为上述部分。

1 个答案:

答案 0 :(得分:7)

您通常可以使用附加到请求或其加载组的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请求都与窗口关联。