Free javascript Hosting


linktracker.js

Uploaded on May 06 2022 09:30 by fartingwombats

function _gaLt(event) {

// if GA is blocked or not loaded, or not main|middle|touch click then don't track
if (typeof ga == 'undefined' || (e.which != 1 && e.which != 2)) {
return;
}

var el = event.srcElement || event.target;

// loop up the DOM tree through parent elements if clicked element is not a link (eg: an image inside a link)
while (el && (typeof el.tagName == 'undefined' || el.tagName.toLowerCase() != 'a' || !el.href)) {
el = el.parentNode;
}

// if a link with valid href has been clicked
if (el && el.href) {
var link = el.href;

// only if it is an external link
if (link.indexOf(location.host) == -1 && !link.match(/^javascript\:/i)) {

// is target set and _(self|parent|top)
var target = (el.target && !el.target.match(/^_(self|parent|top)$/i)) ? el.target : false;

// assume a target if (ctrl|shift|meta)-click
if (event.ctrlKey || event.shiftKey || event.metaKey || event.which == 2) {
target = "_blank";
}

var hbrun = false; // tracker has not yet run

// hitBack to open link in same window after tracker
var hitBack = function () {
// run once only
if (hbrun) return;
hbrun = true;
window.location.href = link;
};

if (target) {
// if target opens a new window then just track
gtag('event', link, {
'event_category': 'Outgoing Links',
'event_label': document.location.pathname + document.location.search
});
} else {
// Prevent standard click, track then open
if (event.type == 'mousedown') {
var blockClick = function (event) {
event.preventDefault();
// remove click event after click
el.removeEventListener('click', boundClick);
}
// bind the click event
var boundClick = blockClick.bind(event)
// prevent the click
el.addEventListener('click', boundClick);
}
event.preventDefault ? event.preventDefault() : event.returnValue = !1;

// send event with callback
gtag('event', link, {
'event_category': 'Outgoing Links',
'event_label': document.location.pathname + document.location.search,
'event_callback': hitBack
});

// Run hitBack again if GA takes longer than 1 second
setTimeout(hitBack, 1000);
}
}
}
}

var _w = window;

/* Use "click" if touchscreen device, else "mousedown" */
var _gaLtEvt = ("ontouchstart" in _w) ? "click" : "mousedown";
/* Attach the event to all clicks in the document after page has loaded */
_w.addEventListener("load", function () { document.body.addEventListener(_gaLtEvt, _gaLt, !1) }, !1);

Back to list