Javascript捕获错误

时间:2017-07-22 10:52:42

标签: javascript

我正在使用 window.error 来尝试捕获所有客户端错误。

它可以正常使用Javascript错误,但它不会捕获网络错误或AJAX错误等所有错误。

这是我的代码(我不能使用jQuery ,因此无法使用.ajaxError):

window.onerror = function(messageOrEvent, source, lineno, colno, error) {
    console.log("Captured: " + messageOrEvent)
}

这是结果: enter image description here

任何人都知道在客户端捕获所有错误的方法吗?

由于

2 个答案:

答案 0 :(得分:1)

可能挂钩默认请求对象:

(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);

答案 1 :(得分:0)

我找到了办法。这是我的代码。我认为这可以捕获所有错误。

    // 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;