window.onerror = function(msg,url,line,col,error){ //沒有URL不上報!上報也不知道錯誤 if (msg != "Script error." && !url){ return true; } setTimeout(function(){ var data = {}; //不必定全部瀏覽器都支持col參數 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;//若是有環 } f = f.caller; } ext = ext.join(","); data.msg = ext; } //把data上報到後臺! },0); return true; };