onreadystatechange的XMLHttpRequest原型未被调用
我试图检测何时在我的UIWebView中完成任何ajax调用。 我修改了这个答案中的代码:JavaScript尽我所能地检测AJAX事件。 这是我的尝试:
var s_ajaxListener = new Object();
s_ajaxListener.tempOnReadyStateChange = XMLHttpRequest.prototype.onreadystatechange;
s_ajaxListener.callback = function () {
window.location='ajaxHandler://' + this.url;
};
XMLHttpRequest.prototype.onreadystatechange = function() {
alert("onreadystatechange called");
s_ajaxListener.tempOnReadyStateChange.apply(this, arguments);
if(s_ajaxListener.readyState == 4 && s_ajaxListener.status == 200) {
s_ajaxListener.callback();
}
}
我正在向webView注入此警报,但警报永远不会发射。 如果我在脚本的开始或结尾放置警报,它会触发,所以我相当肯定没有语法错误。
我不是JS的人,所以我希望这是一个微不足道的问题。
在XMLHttpRequest.prototype
放置一个通用的onreadystatechange
并不适用于我。 但是,链接的代码可以很容易地调整为在发生该事件时调用自定义函数:
var s_ajaxListener = {};
s_ajaxListener.tempOpen = XMLHttpRequest.prototype.open;
s_ajaxListener.tempSend = XMLHttpRequest.prototype.send;
// callback will be invoked on readystatechange
s_ajaxListener.callback = function () {
// "this" will be the XHR object
// it will contain status and readystate
console.log(this);
}
XMLHttpRequest.prototype.open = function(a,b) {
if (!a) var a='';
if (!b) var b='';
s_ajaxListener.tempOpen.apply(this, arguments);
s_ajaxListener.method = a;
s_ajaxListener.url = b;
if (a.toLowerCase() == 'get') {
s_ajaxListener.data = b.split('?');
s_ajaxListener.data = s_ajaxListener.data[1];
}
}
XMLHttpRequest.prototype.send = function(a,b) {
if (!a) var a='';
if (!b) var b='';
s_ajaxListener.tempSend.apply(this, arguments);
if(s_ajaxListener.method.toLowerCase() == 'post')s_ajaxListener.data = a;
// assigning callback to onreadystatechange
// instead of calling directly
this.onreadystatechange = s_ajaxListener.callback;
}
http://jsfiddle.net/s6xqu/
链接地址: http://www.djcxy.com/p/74483.html上一篇: XMLHttpRequest prototype of onreadystatechange not called
下一篇: Angular JS: Detect when page content has rendered fully and is visible