1

我正在将 PhantomJS 与 jQuery 一起使用,我想知道是否可以在将 XMLHttpRequest 传递给浏览器时捕获它,而无需自己启动 POST/GET。

4

3 回答 3

8

有一些简单的 jQuery 函数可以让您在发送 AJAX 请求之前对其进行修改,但它们只针对由 jQuery 发起的 AJAX 请求。要捕获页面上的所有 AJAX 请求,请使用以下基本的 JS-only 方式:

(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

onResourceReceived为页面发出的所有 XHR/AJAX 请求调用Phantom 的回调。两次,实际上,一次使用 stage="start",一次使用 stage="end"。它不会为您提供内容,但会捕获 URL。

于 2016-11-07T22:03:39.040 回答