94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
|
(function(win, doc, navigator) {
|
||
|
var screen = win.screen;
|
||
|
var encode = encodeURIComponent;
|
||
|
var max = Math.max;
|
||
|
// const min = Math.min;
|
||
|
var performance = win.performance;
|
||
|
var timing = performance && performance.timing;
|
||
|
var navigation = performance && performance.navigation;
|
||
|
|
||
|
var pvData = {
|
||
|
dt: doc.title,
|
||
|
de: doc.characterSet || doc.charset,
|
||
|
dr: doc.referrer || void 0,
|
||
|
ul:
|
||
|
navigator.language ||
|
||
|
navigator.browserLanguage ||
|
||
|
navigator.userLanguage ||
|
||
|
void 0,
|
||
|
sd: screen.colorDepth + "-bit",
|
||
|
sr: screen.width + "x" + screen.height,
|
||
|
vp:
|
||
|
max(doc.documentElement.clientWidth, win.innerWidth || 0) +
|
||
|
"x" +
|
||
|
max(doc.documentElement.clientHeight, win.innerHeight || 0),
|
||
|
ga: win.ga_tid,
|
||
|
z: new Date().getTime()
|
||
|
};
|
||
|
|
||
|
function buildQueryString(params) {
|
||
|
var qs = [];
|
||
|
for (var k in params) {
|
||
|
if (params.hasOwnProperty(k) && params[k] !== void 0) {
|
||
|
qs.push(encode(k) + "=" + encode(params[k]));
|
||
|
}
|
||
|
}
|
||
|
return qs.join("&");
|
||
|
}
|
||
|
|
||
|
function sendViaImg(uri, params) {
|
||
|
var img = new Image();
|
||
|
// img.width = img.height = 1;
|
||
|
img.referrerPolicy = "unsafe-url";
|
||
|
img.src = uri + "?" + buildQueryString(params);
|
||
|
}
|
||
|
|
||
|
// function sendBeacon(uri, params) {
|
||
|
// if (!navigator.sendBeacon) return false;
|
||
|
// return navigator.sendBeacon(uri, params);
|
||
|
// }
|
||
|
|
||
|
function send(uri, params) {
|
||
|
uri = win.ga_url + uri;
|
||
|
// if (!sendBeacon(uri, params)) {
|
||
|
sendViaImg(uri, params);
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
function sendTiming() {
|
||
|
if (!timing) { return; }
|
||
|
var navigationStart = timing.navigationStart;
|
||
|
if (navigationStart == 0) { return; }
|
||
|
|
||
|
var filterNumber = function (num) { return isNaN(num) || num == Infinity || num < 0 ? void 0 : num; };
|
||
|
|
||
|
var perfData = {
|
||
|
plt: filterNumber(timing.loadEventStart - navigationStart),
|
||
|
dns: filterNumber(timing.domainLookupEnd - timing.domainLookupStart),
|
||
|
pdt: filterNumber(timing.responseEnd - timing.responseStart),
|
||
|
rrt: filterNumber(timing.redirectEnd - timing.redirectStart),
|
||
|
tcp: filterNumber(timing.connectEnd - timing.connectStart),
|
||
|
srt: filterNumber(timing.responseStart - timing.requestStart),
|
||
|
dit: filterNumber(timing.domInteractive - navigationStart),
|
||
|
clt: filterNumber(timing.domContentLoadedEventStart - navigationStart)
|
||
|
};
|
||
|
|
||
|
for (var key in pvData) {
|
||
|
perfData[key] = pvData[key];
|
||
|
}
|
||
|
|
||
|
send("/t", perfData);
|
||
|
}
|
||
|
|
||
|
if (!navigation || navigation.type != navigation.TYPE_RELOAD) {
|
||
|
// page view
|
||
|
send("/p", pvData);
|
||
|
// timing
|
||
|
if (document.readyState == "complete") {
|
||
|
sendTiming();
|
||
|
} else {
|
||
|
win.addEventListener("load", sendTiming);
|
||
|
}
|
||
|
}
|
||
|
})(window, document, navigator);
|