我正在将 PhantomJS 与 jQuery 一起使用,我想知道是否可以在将 XMLHttpRequest 传递给浏览器时捕获它,而无需自己启动 POST/GET。
问问题
2092 次
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 回答