Skip to content

Instantly share code, notes, and snippets.

@mirinzhang
Last active March 10, 2020 08:29
Show Gist options
  • Select an option

  • Save mirinzhang/aeb2ef695bbb55f77a77c169c7c60725 to your computer and use it in GitHub Desktop.

Select an option

Save mirinzhang/aeb2ef695bbb55f77a77c169c7c60725 to your computer and use it in GitHub Desktop.

Revisions

  1. mirinzhang revised this gist Mar 10, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion errorHandler.js
    Original file line number Diff line number Diff line change
    @@ -11,7 +11,7 @@ var errorHandler = {
    },
    // 记录普通错误
    script: function (message, source, lineno, colno) {
    var stack = (error && error.stack) || source + ':' + lineno + ':' + colno;
    var stack = source + ':' + lineno + ':' + colno;
    errorHandler.callback('script', message, stack);
    },
    // 记录资源加载错误
  2. mirinzhang created this gist Mar 3, 2020.
    37 changes: 37 additions & 0 deletions errorHandler.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    var noop = function(){};

    var errorHandler = {
    callback: null,
    init: function (callback) {
    errorHandler.callback = callback || noop;

    window.onerror = errorHandler.script;
    window.addEventListener('error', errorHandler.source, true);
    window.addEventListener('unhandledrejection', errorHandler.promise, true);
    },
    // 记录普通错误
    script: function (message, source, lineno, colno) {
    var stack = (error && error.stack) || source + ':' + lineno + ':' + colno;
    errorHandler.callback('script', message, stack);
    },
    // 记录资源加载错误
    source: function (e) {
    e.preventDefault();
    var target = e.target || e.srcElement;
    var isElementTarget = target instanceof HTMLScriptElement || target instanceof HTMLLinkElement || target instanceof HTMLImageElement;

    // 不是资源加载错误时,直接返回
    if (!isElementTarget) {
    return false;
    }

    var url = target.src || target.href;
    errorHandler.callback('source', 'Unable to load resources', url);
    },
    // 记录promise错误
    promise: function (e) {
    e.preventDefault();
    var error = e.reason || {};
    errorHandler.callback('promise', error.message, error.stack);
    }
    };