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

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

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

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

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

注意:我将 gwt 用于扩展,而 JSNI 用于上述部分。

最佳答案

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

关于javascript - 是否可以知道 HTTPRequest 的目标 DOMWindow?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10719606/

10-11 22:12