我正在尝试构建一个脚本,该脚本将充当本机XMLHttpRequest
对象的代理/包装器,使我能够对其进行拦截,修改responseText并返回到原始的onreadystatechange事件。
如果应用正在尝试接收的数据在本地存储中已经存在,则上下文将中止XMLHttpRequest
并将本地存储的数据传递回应用成功/失败回调方法。假设我无法控制应用程序现有的AJAX回调方法。
我最初尝试过以下想法。
var send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(data){
//Do some stuff in here to modify the responseText
send.call(this, data);
};
但是正如我现在确定的那样,responseText是只读的。
然后,我尝试退后一步,向编写自己的完整本机代理XMLHttpRequest
,最终最终编写了自己的本机方法版本。类似于此处讨论的内容…
http://www.ilinsky.com/articles/XMLHttpRequest/#implementation-
wrapping
但是它很快变得令人困惑,并且仍然难以将修改后的数据返回到原始onReadyStateChange
方法中。
有什么建议?这有可能吗?
//
// firefox, ie8+
//
var accessor = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'responseText');
Object.defineProperty(XMLHttpRequest.prototype, 'responseText', {
get: function() {
console.log('get responseText');
return accessor.get.call(this);
},
set: function(str) {
console.log('set responseText: %s', str);
//return accessor.set.call(this, str);
},
configurable: true
});
//
// chrome, safari (accessor == null)
//
var rawOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
if (!this._hooked) {
this._hooked = true;
setupHook(this);
}
rawOpen.apply(this, arguments);
}
function setupHook(xhr) {
function getter() {
console.log('get responseText');
delete xhr.responseText;
var ret = xhr.responseText;
setup();
return ret;
}
function setter(str) {
console.log('set responseText: %s', str);
}
function setup() {
Object.defineProperty(xhr, 'responseText', {
get: getter,
set: setter,
configurable: true
});
}
setup();
}
拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)
拦截时间 bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数
拦截窗口 bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本
我想拦截改造引擎收到的所有响应,并扫描HTTP错误代码,例如错误403。 我知道我可以使用每个请求的failure(reformationerror error)回调并检查403,但我想将响应打包为全局响应。 我可以看到请求拦截是可能的,但我看不到类似的响应选项。 有什么建议吗?
You can enable changing of locales by adding the LocaleChangeInterceptor to one of the handler mappings (see [Section 21.4, "Handler mappings"](mvc.html the request and change the locale. It calls set
拦截注册表 bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健