4

一部の HTTPRequest を除外してページの読み込みを傍受する必要がある Firefox 拡張機能を開発しています。ここに記載されている手順を使用してそれを行いました。私の質問はこのリンクの内容に基づいていることに注意してください。

HTTPObserversのセクションにあるメソッドを使用しました。そしてそれはうまくいきました.送信されたリクエストのそれぞれのURLを抽出することができました.

しかし、私が本当に必要としているもう 1 つのことは、HTTPRequest に関連するコンテンツがロードされようとしていたターゲット DOM ウィンドウを取得することです。HTTPObservers を使用することは可能ですか?

上記のリンクでは、 WebProgressListenersを使用した別の方法が説明されています。

私もそれを試しました。onLocationChange() メソッドは、URL バーの場所の変更のみを返します。これらの進行状況リスナーのいずれかを使用して HTTPRequest URL を取得することは何とか可能ですか? もしそうなら、私が正しく理解していれば、 aWebProgress.DOMWindow は私が必要とするウィンドウを提供してくれるからです。

注: 拡張機能には gwt を使用し、上記の部分には JSNI を使用しています。

4

1 に答える 1

7

通常、リクエストまたはそのロードグループに添付された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リクエストがウィンドウに関連付けられているわけではありません。

于 2012-05-23T12:22:08.767 に答える