2011-11-13 5 views
1

私はjQueryでPhantomJSを使用していますが、POST/GETを自分で開始せずに、ブラウザに渡されるXMLHttpRequestをキャプチャすることが可能かどうか疑問に思っています。jQueryでXHRをキャプチャしますか?

答えて

8

あり、それらが送信される前に、AJAXリクエストを変更できるようになる簡単なjQueryの機能がありますが、彼らは唯一のjQueryによって開始AJAX要求をターゲット。ページ上のすべてのAJAX要求をキャッチするには、以下の基本的なJS-唯一の方法を使用します。

(function(open){ 
    XMLHttpRequest.prototype.open = function(method, url, async, username, password) { 
     // modify the variables here as needed or use 'this` keyword to change the XHR object or add event listeners to it 
     open.call(this, method, url, async, username, password); 
    }; 
})(XMLHttpRequest.prototype.open); 

をあなたはまた、XHRセンド()関数を書き換えることができます:

(function(send){ 
    XMLHttpRequest.prototype.send = function(body) { 
     // your code 
     send.call(this, body); 
    }; 
})(XMLHttpRequest.prototype.send); 

を基本的には、このコードは、する必要がありますあなたのページで実行される最初のコード。すべての後続のXHRリクエストは、書き換えられた関数を経由してパラメータなどを変更できるようになります。

注:一部のバージョンのIEをターゲットにする場合は、IE AJAXのための使用。

+0

素晴らしい感謝、素晴らしい作品です。 – relm

+0

将来のユーザには注意が必要です。iframeのコードはウィンドウオブジェクトのコピーを取得しますが、XHRをフックする必要があります。 –

1

ajaxPrefilter音は良いですが、使用したことはありません。これは、サーバーに行く前に要求をフィルターに掛けます。その後、時に要求戻り、あなたが望むものを、変更するpipeを使用することができます。

$.ajaxPrefilter(function(options, originalOptions, jqXHR){ 
    jqXHR.pipe(function(data){ 
     //modify the data the way you want 
    }) 
}); 
0

ファントムのonResourceReceivedコールバックは、ページによって行われたすべてのXHR/AJAX要求に対して呼び出されます。 2回、実際にはstage = "start"で1回、stage = "end"で1回です。それはあなたにコンテンツを与えることはありませんが、URLを取得します。

関連する問題