1

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

4

3 に答える 3

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 send() 関数を書き直すこともできます。

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

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

注: IE の一部のバージョンをターゲットにする場合は、IE が AJAX に使用する ActiveXObject に同様のコードを実装する必要があります。

于 2011-11-13T23:00:26.180 に答える
1

ajaxPrefilterは良さそうに聞こえますが、使用したことはありません。これにより、サーバーに行く前にリクエストがフィルタリングされます。次に、パイプを使用して、リクエストが返されたときに必要なものを変更できます。

$.ajaxPrefilter(function(options, originalOptions, jqXHR){
    jqXHR.pipe(function(data){
        //modify the data the way you want
    })
});
于 2011-11-13T22:41:42.813 に答える
0

Phantom のonResourceReceivedコールバックは、ページによって作成されたすべての XHR/AJAX リクエストに対して呼び出されます。2 回、実際には、stage="start" で 1 回、stage="end" で 1 回。コンテンツは提供されませんが、URL は取得されます。

于 2016-11-07T22:03:39.040 に答える