se-report
Version:
report js error to your log-server
157 lines (135 loc) • 4.64 kB
JavaScript
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);
})
}