tracking external links with(out) AJAX


2005-9-14

Here's something that would have been an anti-Ajax rant some time ago, but now is more of a K.I.S.S. thing now.

I recently needed some JavaScript to track users leaving a webpage by following links to external pages. So the server-logs would be out. I had a rather good idea of how it could work but couldn't get it to work reliably. Googling I found this blog-post:

That code worked nicely, but had the problem of requiring an Ajax lib for Browsers not able of XMLHttpRequest (basically all IE). That seemed like a big effort for my humble needs, so I sat back down and fixed my code. And now it works wonderfully. And would have done so even in pre-Mozilla/Safari days. The img object is your friend!

// tracking of external URLs 
// unobstrusive DHTML/JS
// no changes to the HTML source of a webpage needed
// May 2005 Martin Spernau (martin AT traumwind DOT de)
// just include this script in the head section of a page
// external links will be tracked via a 
// request for a dummy GIF with the actual URL as path-param


// Add an eventListener to browsers that can do it somehow.
function addEvent(obj, evType, fn){
        if (obj.addEventListener){
                obj.addEventListener(evType, fn, true);
                return true;
        } else if (obj.attachEvent){
                var r = obj.attachEvent("on"+evType, fn);
                return r;
        } else {
                return false;
        }
}

function trackInit() {
	var links = document.getElementsByTagName("a");
	var externalRex = /^ http[s]*:/i;
	for (var i = 0; i < links.length; i++) {
		var link = links[i];
		if (externalRex.exec(link.href)) {
			eval( 
			"var fn = function () {"
			+ "track(this);"
			+ "return false;"
			+ "}" 
			);
			addEvent(link,"click", fn );
		}
	}
}

function track(link) {
	var url = link.href;
	var trImg = new Image();
	var now = new Date();
	trImg.src = "/tracking/dummy.gif/"+url+"?"+now.getTime();
}

addEvent(window,'load', trackInit);

Why use Ajax when simple JavaScript might suffice?

Similar

<< daily writers block  |  designing for Helma.org >>


alles Bild, Text und Tonmaterial ist © Martin Spernau, Verwendung und Reproduktion erfordert die Zustimmung des Authors

Martin Spernau
© 1994-2024


amazon.de Wunschliste

Facebook me!
Google+

Google

powered by Traumtank