Javascript捕获错误
我正在使用window.error尝试捕获所有客户端错误 它可以很好地处理Javascript错误,但它不能捕获所有错误,如网络错误或AJAX错误 这是我的代码(我无法使用jQuery,因此无法使用.ajaxError): 结果是: 有人知道在客户端捕获所有错误的方法吗Javascript捕获错误,javascript,Javascript,我正在使用window.error尝试捕获所有客户端错误 它可以很好地处理Javascript错误,但它不能捕获所有错误,如网络错误或AJAX错误 这是我的代码(我无法使用jQuery,因此无法使用.ajaxError): 结果是: 有人知道在客户端捕获所有错误的方法吗 谢谢可能会钩住默认的请求对象: (function(orig){ window.XMLHttpRequest=function(...args){ var instance=new orig(...args);
谢谢可能会钩住默认的请求对象:
(function(orig){
window.XMLHttpRequest=function(...args){
var instance=new orig(...args);
instance.addEventListener("readyStateChange",function(){
if(instance.status!==200){
throw new Error(instance.status+":"+instance.statusText);
}
});
return instance;
};
})(XMLHttpRequest);
我找到了一条路。这是我的密码。我认为这会捕获所有错误
// JavaScript Errors
window.onerror = function(messageOrEvent, source, lineno, colno, error) {
console.log("Captured: " + messageOrEvent)
}
// 404 FILES
window.addEventListener('error', function(e) {
console.log(e);
}, true);
// AJAX Errors
var open = window.XMLHttpRequest.prototype.open,
send = window.XMLHttpRequest.prototype.send;
function openReplacement(method, url, async, user, password) {
this._url = url;
return open.apply(this, arguments);
}
function sendReplacement(data) {
if(this.onreadystatechange) {
this._onreadystatechange = this.onreadystatechange;
}
this.onreadystatechange = onReadyStateChangeReplacement;
return send.apply(this, arguments);
}
function onReadyStateChangeReplacement() {
// CAPTURE HERE.
if(this.status != 200){
console.log(this.responseURL + " " + this.status + " " + this.statusText);
}
if(this._onreadystatechange) {
return this._onreadystatechange.apply(this, arguments);
}
}
window.XMLHttpRequest.prototype.open = openReplacement;
window.XMLHttpRequest.prototype.send = sendReplacement;
如果ajax调用是正确的,jquery可以执行{error:err=>throw err},我必须全局执行。我不能编辑每个函数。无论如何,谢谢:)可能会覆盖一些XMLHttpRequest.prototype函数。非常感谢。这就是我要找的。在…args中支持什么?@marcos Aguayo与.apply(参数)相同,请查看rest参数
// JavaScript Errors
window.onerror = function(messageOrEvent, source, lineno, colno, error) {
console.log("Captured: " + messageOrEvent)
}
// 404 FILES
window.addEventListener('error', function(e) {
console.log(e);
}, true);
// AJAX Errors
var open = window.XMLHttpRequest.prototype.open,
send = window.XMLHttpRequest.prototype.send;
function openReplacement(method, url, async, user, password) {
this._url = url;
return open.apply(this, arguments);
}
function sendReplacement(data) {
if(this.onreadystatechange) {
this._onreadystatechange = this.onreadystatechange;
}
this.onreadystatechange = onReadyStateChangeReplacement;
return send.apply(this, arguments);
}
function onReadyStateChangeReplacement() {
// CAPTURE HERE.
if(this.status != 200){
console.log(this.responseURL + " " + this.status + " " + this.statusText);
}
if(this._onreadystatechange) {
return this._onreadystatechange.apply(this, arguments);
}
}
window.XMLHttpRequest.prototype.open = openReplacement;
window.XMLHttpRequest.prototype.send = sendReplacement;