Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save greggb/76aebee997616eee387c44dd072d59ed to your computer and use it in GitHub Desktop.
Save greggb/76aebee997616eee387c44dd072d59ed to your computer and use it in GitHub Desktop.
Minimal Analytics Snipped
(function (history, trackingId, options) {
const getParameterByName = (paramName) => {
var searchString = window.location.search.substring(1),
i, val, params = searchString.split("&");
for (i=0;i<params.length;i++) {
val = params[i].split("=");
if (val[0] == paramName) {
return val[1] || undefined;
}
}
return undefined;
};
const generateId = () => {
return '_' + Math.random().toString(36).substr(2, 9);
};
const getId = () => {
if (!localStorage.cid) {
localStorage.cid = generateId()
}
return localStorage.cid;
};
const serialize = (obj) => {
var str = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
if(obj[p] !== undefined) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
}
}
return str.join("&");
};
const pageView = () => {
setTimeout(() => {
const data = {
v: '1',
aip: options.anonymizeIp ? 1 : undefined,
tid: trackingId,
cid: getId(),
t: 'pageview',
sd: options.colorDepth && screen.colorDepth ? `${screen.colorDepth}-bits` : undefined,
dr: getParameterByName('ref'),
dt: document.title,
dl: document.location.origin + document.location.pathname + document.location.search,
ul: options.language ? (navigator.language || "").toLowerCase() : undefined,
de: options.characterSet ? document.characterSet : undefined,
sr: options.screenSize ? `${(window.screen || {}).width}x${(window.screen || {}).height}` : undefined,
vp: options.screenSize && window.visualViewport ? `${(window.visualViewport || {}).width}x${(window.visualViewport || {}).height}` : undefined
};
var xhr = new XMLHttpRequest();
xhr.open("GET", `https://www.google-analytics.com/collect?${serialize(data)}&z=${Math.random()}`, true);
xhr.send(null);
}, 10);
};
const pushState = history.pushState;
history.pushState = function (state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({ state: state });
}
pageView()
return pushState.apply(history, arguments);
}
pageView();
})(window.history, "XX-XXXXXXXXX-X", {
anonymizeIp: true,
colorDepth: true,
characterSet: true,
screenSize: true,
language: true
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment