2

Webページ内でiframeのURLをプログラムで設定しました。このURL変更(css、スクリプト、画像などの読み込み用のURL)からトリガーされるhttpリクエストを知る必要があります。XMLHttpRequestをインターセプトしましたが、このオブジェクトが呼び出されることはありません...

これらのhttpリクエストをインターセプトするにはどうすればよいですか?

iframeを「ロード」して、トリガーされたすべてのURLリクエストを取得する別の方法はありますか?

これが私のコードです:

(function(xhr){
  var pt = xhr.prototype;
  pt._open = pt.open;
  pt.open = function(){
   console.log('Open called...');
   this._open.apply(this, arguments);
})(XMLHttpRequest);
...
$('#iframe').attr('src', 'http://www.stackoverflow.com');
4

1 に答える 1

2

Anは親ウィンドウとは<iframe />異なるため、 をオーバーライドすると、ウィンドウ内のウィンドウではなく、親ウィンドウ内のウィンドウがオーバーライドされます。windowXMLHttpRequest<iframe />

残念ながら、同一オリジン ポリシーにより の にアクセスできwindowない<iframe />ため、これについてはどうすることもできません。

ここで SOP が機能していなくても、 AJAX リクエストをインターセプトできても、アセット リクエスト (CSS、JS、画像) をインターセプトするためにできることは何もありません。

最善の選択肢は、サーバーでプロキシを使用し、そこを介して iframe リクエストをルーティングすることです。直接アクセスするのではなく、プロキシを介してすべてのアセット URL を書き換えます (ただし、JavaScript が他のアセットなどを含むなど、追跡できないエッジ ケースがあります)。

于 2013-03-03T11:03:42.417 に答える