js錯誤收集

<script type="text/javascript">
window.onerror = function(msg, url, line, col, error, errorObject) {
console.log('msg', msg);
console.log('url', url);
console.log('line', line);
console.log('col', col);
console.log('error', error);
console.log('errorObject', errorObject);
//沒有URL不上報!上報也不知道錯誤
if (msg != "Script error." && !url) {
return true;
}
//采用異步的方式
//我遇到過在window.onunload進行ajax的堵塞上報
//由于客戶端強制關(guān)閉webview導(dǎo)致這次堵塞上報有Network Error
//我猜測這里window.onerror的執(zhí)行流在關(guān)閉前是必然執(zhí)行的
//而離開文章之后的上報對于業(yè)務(wù)來說是可丟失的
//所以我把這里的執(zhí)行流放到異步事件去執(zhí)行
//腳本的異常數(shù)降低了10倍
setTimeout(function() {
var data = {};
//不一定所有瀏覽器都支持col參數(shù)
col = col || (window.event && window.event.errorCharacter) || 0;

  data.url = url;
  data.line = line;
  data.col = col;
  if (!!error && !!error.stack) {
    //如果瀏覽器有堆棧信息
    //直接使用
    data.msg = error.stack.toString();
  } else if (!!arguments.callee) {
    //嘗試通過callee拿堆棧信息
    var ext = [];
    var f = arguments.callee.caller,
      c = 3;
    //這里只拿三層堆棧信息
    while (f && (--c > 0)) {
      ext.push(f.toString());
      if (f === f.caller) {
        break; //如果有環(huán)
      }
      f = f.caller;
    }
    ext = ext.join(",");
    data.msg = ext;
  }
  //把data上報到后臺!
  console.log('errorData', data);
}, 0);

return false;

};
</script>

目前打包成一行的js文件錯誤位置不好定位,如果使用try_catch 回調(diào)函數(shù)中錯誤捕捉不到,可以window.onerror配合著try_catch 使用,抓取錯誤信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容