Захватить XHR с помощью jQuery? - PullRequest
1 голос
/ 14 ноября 2011

Я использую PhantomJS с jQuery, и мне интересно, возможно ли захватить XMLHttpRequest при его передаче в браузер, не инициируя сам POST / GET.

Ответы [ 3 ]

8 голосов
/ 14 ноября 2011

Существуют простые функции jQuery, которые позволяют изменять запросы AJAX до их отправки, но они предназначены только для запросов AJAX, инициированных jQuery.Чтобы перехватить все запросы 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, вам необходимо реализовать аналогичный код для ActiveXObjectчто IE использует для AJAX.

1 голос
/ 14 ноября 2011

ajaxPrefilter звучит хорошо, но никогда не использовал его.Это фильтрует запрос перед переходом на сервер.Затем вы можете использовать pipe , чтобы изменить то, что вы хотите, когда запрос вернется:

$.ajaxPrefilter(function(options, originalOptions, jqXHR){
    jqXHR.pipe(function(data){
        //modify the data the way you want
    })
});
0 голосов
/ 08 ноября 2016

Обратный вызов onResourceReceived Phantom вызывается для всех запросов XHR / AJAX, сделанных страницей.Дважды, на самом деле, один раз с stage = "start", один раз с stage = "end".Это не даст вам контент, но захватит URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...