UNPKG

se-report

Version:

report js error to your log-server

157 lines (135 loc) 4.64 kB
module.exports = function (cb) { window.addEventListener("load", function () { var system = '', //系统环境(安卓/IOS/IPAD) ua = navigator.userAgent, //用户代理 protocol = '', //协议(HTTP/HTTPS) network = '', //网络 navigationStart = '', //开始导航 navigation = 0, //导航用时 dns = 0, //dn解析用时 tcp = 0, //tcp连接用时 ssl = 0, //ssl连接用时 request = 0, //请求用时 response = 0, //返回用时 domComplete = 0, //dom解析时间 domLoaded = 0, //dom loadEvent = 0, //load 时间用时 total = 0, //页面总请求时间 dom = 0; //dom总体用时 var logMsg = 'Unknown'; //设备检测 var ipod = ua.match(/(ipod).*\s([\d_]+)/i), ipad = ua.match(/(ipad).*\s([\d_]+)/i), iphone = ua.match(/(iphone)\sos\s([\d_]+)/i), android = ua.match(/(android)\s([\d\.]+)/i); if (android) { logMsg = 'Android ' + android[2]; } else if (iphone) { logMsg = 'iPhone, iOS ' + iphone[2].replace(/_/g, '.'); } else if (ipad) { logMsg = 'iPad, iOS ' + ipad[2].replace(/_/g, '.'); } else if (ipod) { logMsg = 'iPod, iOS ' + ipod[2].replace(/_/g, '.'); } var templogMsg = logMsg; var version = ua.match(/MicroMessenger\/([\d\.]+)/i); logMsg = 'Unknown'; if (version && version[1]) { logMsg = version[1]; templogMsg += (', WeChat ' + logMsg); } system = templogMsg; logMsg = 'Unknown'; if (location.protocol == 'https:') { logMsg = 'HTTPS'; } else if (location.protocol == 'http:') { logMsg = 'HTTP'; } else { logMsg = location.protocol.replace(':', ''); } templogMsg = logMsg; network = ua.toLowerCase().match(/ nettype\/([^ ]+)/g); logMsg = 'Unknown'; if (network && network[0]) { network = network[0].split('/'); logMsg = network[1]; templogMsg += (', ' + logMsg); network = templogMsg; } else { protocol = templogMsg; } setTimeout(function () { var performance = window.performance || window.msPerformance || window.webkitPerformance; if (performance && performance.timing) { var t = performance.timing; //浏览器上下文的上一个文档卸载之后的时间 if (t.navigationStart) { navigationStart = navigationStart; } //切换导航用时 if (t.navigationStart && t.domainLookupStart) { navigation = t.domainLookupStart - t.navigationStart; } //域名解析时间 if (t.domainLookupEnd && t.domainLookupStart) { dns = t.domainLookupEnd - t.domainLookupStart; } //tcp用时,ssl证书解析用时 if (t.connectEnd && t.connectStart) { tcp = t.connectEnd - t.connectStart; if (t.connectEnd && t.secureConnectionStart) { ssl = t.connectEnd - t.secureConnectionStart; } } //请求用时 if (t.responseStart && t.requestStart) { request = t.responseStart - t.requestStart; } //返回用时 if (t.responseEnd && t.responseStart) { response = t.responseEnd - t.responseStart; } //t.domcomplete 解析器完成主文档解析 //t.domloading 解析器开始解析 //domcomplete 文档解析时间 //t.domContentLoadEventStart domContentLoad事件开始时间 //domLoaded if (t.domComplete && t.domLoading) { domComplete = t.domComplete - t.domLoading; if (t.domContentLoadedEventStart && t.domLoading) { domLoaded = t.domContentLoadedEventStart - t.domLoading; } } //load 事件用时 if (t.loadEventEnd && t.loadEventStart) { loadEvent = t.loadEventEnd - t.loadEventStart; } //total 页面总体用时 //dom 文档总体用时 if (t.navigationStart && t.loadEventEnd) { total = t.loadEventEnd - t.navigationStart; dom = t.domComplete - t.navigationStart; } } var result = { system, ua, protocol, network, navigationStart, navigation, dns, tcp, ssl, request, response, domComplete, domLoaded, loadEvent, total, dom, } cb(result); }, 0); }) }