1

WebRequest API を使用して、Chrome から送信されるリクエストを変更しています。リクエストを書き換える方法を知るために、送信リクエストの原因となったフレーム URL を知りたいと思います。フレーム ID とタブ ID を取得できることがわかりました。これらを使用してコンテンツ スクリプトにメッセージを送信し、URI を確認できます。しかし、メッセージングは​​常に非同期であるため、リクエストが送信される前にその情報を確実に取得する方法はないようです。

これはテスト ツール用であり、通常のユーザー用ではありません。そのため、多少の遅延が発生してもかまいません。これを行う別の方法があるかどうか誰かが知っていますか? setTimeout を使用してみましたが、コンテンツ セキュリティ ポリシーによってブロックされています。リファラーを使用しても、HTTPS フレームからの HTTP リクエストには設定されていないため、うまくいきません。

4

1 に答える 1

1

あなたが何を成し遂げようとしているのか完全に理解しているかどうかはわかりませんが、これが私の考えです。

シナリオ

メインフレームのグーグル、サブフレームのフェイスブックとツイッター、そしてフェイスブックのフレームからのリクエストを変更したい!

その場合は、これが私が試していることです。

1. onCompletedイベントリスナーを登録します。これは、完了したリクエスト情報(URLやフレームIDなど)を取得するために使用され、それらを配列に格納します。

2. onBeforeSendHeadersイベントリスナーを登録します。これは、リクエスト情報を取得し、前の手順で保存したものと比較するために使用されます。合格した場合は、ヘッダーを変更できます。

したがって、コードは次のようになります

onCompleted({情報を格納する-つまり、URLとフレームID-を配列に格納する}、...)

onBeforeSendHeaders({リクエストを行ったフレームIDを、ヘッダーの変更と一致する場合は以前に保存されたフレームIDと比較}、...)

あなたのアプローチと私がリストしたものの違い

あなたのアプローチでは、リクエストが送信された後にフレームに関する情報を取得するために非同期メッセージを使用しました。私のアプローチでは、それ以上のメッセージングを行う必要なしにそれらの情報を準備できるので、リクエストが発生したときはいつでもすぐに使用できます。

これがお役に立てば幸いです。

于 2012-05-12T21:31:06.367 に答える