UNPKG

@_gz/browser-error

Version:

浏览器收集错误信息

2 lines (1 loc) 7.88 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).file={})}(this,function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e,t){return e(t={exports:{}},t.exports),t.exports}function a(e){try{var t=e.message,n=e.stack,r=n.split(/\r?\n/g)[1],o=r.indexOf("http"),a=r.indexOf(".js")+3,i=r.slice(o,a);console.log("source",i);var s=r.split(":");console.log("linenoSplit",s);var c=parseInt(s.pop());return{message:t,source:i,line:parseInt(s.pop()),column:c,stack:n}}catch(e){throw new Error(e)}}var c=t(n(function(t){function n(e){return t.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t.exports.__esModule=!0,t.exports.default=t.exports,n(e)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports})),u={data:null,get:function(){return this.data},set:function(e){this.data=e}},o=[],i=null,s=5;function r(t){console.log("body",t);var e=u.get()||{},n=e.url,e=e.params;if(t.length<1)return console.log("没有错误数据可上报,但触发了上报机制");var r=new XMLHttpRequest;r.withCredentials=!1,r.open("POST",n,!0),r.setRequestHeader("Access-Control-Allow-Origin","*"),r.onreadystatechange=function(){var e;4===r.readyState&&200!=+r.status?(e=t._re||0)<s&&(t._re=e+1,f(t)):(o=[],clearTimeout(i))},r.setRequestHeader("Content-Type","application/json;charset=UTF-8"),r.send(JSON.stringify({errors:t,params:e}))}function l(){clearTimeout(i),i=null,r(o)}function f(e){e._re||o.push(e),i=i||setTimeout(l,3e3),window.addEventListener("pagehide",function(){return function(e){var t=(n=u.get()||{}).url,n=n.params;if(0!==e.length){try{if(navigator.sendBeacon&&navigator.sendBeacon(t,JSON.stringify({errors:e,params:n})))return void(o=[])}catch(e){}r(e)}}(o)},!1)}function p(e,t,n,r,o){var a=(u.get()||{}).projectName,i=process.env.COMMITHASH||"";if(console.log("COMMITHASH",process.env.COMMITHASH),!i)return console.warn("当前环境变量{COMMITHASH}未配置,请配置检查webpack配置"),!1;var s=(null==t?void 0:t.slice(t.lastIndexOf("/")+1))||"";null!=o&&f({type:"error",projectName:a,commitHash:i,message:e,source:t,sourceName:s,line:n,column:r,stack:o,request_times:Date.now()})}function d(e){var t=a(e),n=t.message,r=t.source,o=t.line,e=t.column,t=t.stack;n&&n.includes("404")?console.warn("当前404不发送错误信息"):p(n,r,o,e,t)}function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(n="Object"===n&&e.constructor?e.constructor.name:n)||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,t=function(){};return{s:t,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(){function a(e){return"[object Function]"===Object.prototype.toString.call(e)}function e(){if(a(performance.getEntriesByType)){var e=performance.getEntriesByType("resource"),e=(o=function(e){return-1===["fetch","xmlhttprequest","beacon"].indexOf(e.initiatorType)},e.filter(function(e){return o(e)}));if(e.length){var t,n=y((r=function(e){return{type:"resource",request_url:e.name,http_code:200,request_time:Math.round(e.duration)}},e.map(function(e){return r(e)})));try{for(n.s();!(t=n.n()).done;)f(t.value)}catch(e){n.e(e)}finally{n.f()}}a(performance.clearResourceTimings)&&performance.clearResourceTimings()}var r,o}"complete"===document.readyState?e():window.addEventListener("load",e)}var g=t(n(function(e){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports})),b=t(n(function(e){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e},e.exports.__esModule=!0,e.exports.default=e.exports})),w=function(){function e(){g(this,e)}return b(e,[{key:"push",value:function(e){e instanceof Array&&e[0]&&f.report({type:"custom",message:[{ext1:e[0],ext2:e[1]||"",ext3:e[2]||"",ext4:e[3]||"",ext5:e[4]||""}]})}}]),e}();var h=t(n(function(e){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.__esModule=!0,e.exports.default=e.exports}));function O(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function x(){var e,t=window.performance;t?(e=t.timing,(t={}).loadPage=e.loadEventEnd-e.navigationStart,t.domReady=e.domComplete-e.responseEnd,t.redirect=e.redirectEnd-e.redirectStart,t.lookupDomain=e.domainLookupEnd-e.domainLookupStart,t.ttfb=e.responseStart-e.navigationStart,t.request=e.responseEnd-e.requestStart,t.loadEvent=e.loadEventEnd-e.loadEventStart,t.appcache=e.domainLookupStart-e.fetchStart,t.unloadEvent=e.unloadEventEnd-e.unloadEventStart,t.connect=e.connectEnd-e.connectStart,f(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?O(Object(n),!0).forEach(function(e){h(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}({type:"performance"},t))):console.warn("你的浏览器不支持 performance 接口")}e.default=function(){var e=(n=(a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{})||{}).url,t=n.projectName,n=n.params;if(!e||!t)return console.warn("上传接口url或项目名称projectName: 未配置,请重新检查"),!1;if(n&&"[object Object]"!==Object.prototype.toString.call(n))return console.warn("params参数不是对象,重新检查"),!1;var r,o,a=Object.assign({sendError:!0,sendPV:!1,sendApi:!1,sendResource:!1,sendPerf:!1,sendCustom:!1},a);function i(){f({type:"pv",to_url:window.location.href})}function s(){f({type:"pv",to_url:window.location.href})}u.set(a),a.sendError&&(window.addEventListener("error",function(e){console.log("addEventListener ------error",e),"object"===c(e.error)&&e.error.stack&&d(e.error)},!0),window.addEventListener("unhandledrejection",function(e){"object"===c(e.reason)&&e.reason.stack&&(console.log("unhandledrejection:event.reason",e.reason),d(e.reason))})),a.sendApi,a.sendResource&&v(),a.sendPV&&(window.addEventListener("hashchange",s),window.addEventListener("load",i),window.addEventListener("beforeunload",function(){window.removeEventListener("hashchange",s),window.removeEventListener("load",i)})),a.sendPerf&&x(),a.sendCustom&&(r=window.$watchDogEvents||[],o=new w,window.$watchDogEvents=o,setTimeout(function(){for(var e=0;e<r.length;e++)o.push(r[e])},0))},e.errorHandler=p,e.parseStack=a,Object.defineProperty(e,"__esModule",{value:!0})});