tiny-track.js - Page tracking for tinyJS

tiny-track.js ermöglicht die elegante statistische Erfassung von Client-Eigenschaften und Seiten-Ereignissen.
tiny-track-extra.ja erweitert das Tracking um weitere Parameter und Events (diese sind im folgenden mit * gekennzeichnet).

Download

tiny-track.js [3834b] - tiny-track-min.js.gz [1170b]

tiny-track-extra.js [991b] - tiny-track-extra-min.js.gz [441b]

Hinweis

Die t.track-Funktion benötigt tiny.js, falls slicing verwendet werden soll, zudem noch tiny-cookie; die optionale Browser-Erkennung* des client-Parameters erfordert zudem tiny-browser und die optionale Flash-Erkennung* tiny-swf. Auch ohne die zusätzlichen Scripte, von tiny.js abgesehen, funktioniert tiny-track, ist jedoch in seinem Funktionsumfang eingeschränkt. Andere Scripte sind nicht erforderlich.

Verwendung

Das Tracking wird beim Laden der Seite mit den entsprechenden Optionen über die Methode t.track.init(opts) initialisiert. Die Optionen sind dabei als Objekt gekapselt (es kann auch ein Array von Optionen übergeben werden):

urlURL zum Tracking-Pixel-Versand (erforderlich)
typeEvent-Typ, welcher getrackt werden soll (erforderlich)
sliceObjekt mit einem Cookie-Defaults-Objekt sowie der Chance, die gesliced werden soll (optional):
slice.cookieCookie-Objekt, welches mit einem Value befüllt wird.
slice.chanceChance als Prozentzahl (0-100), in das Tracking hineinzukommen.

Zusätzlich kann man die folgenden Eigenschaften des Trackings jederzeit einstellen bzw. auslesen:

t.track.movetimeoutIntervall in Millisekunden. Wenn die Maus so lange nicht bewegt wird, wird das mousemove-Event getrackt. Default sind 5 Sekunden.
t.track.textlength*Die Länge des Textes, welcher mit dem Parameter "text" übertragen wird, normalerweise 20 Zeichen
t.track.ts1Der Timestamp der ersten Initialisierung (nach Möglichkeit sollte dieser nicht überschrieben werden)
t.track.urlsEin Speicher für die Tracking-Einstellungen. Daran sollte man nur manipulieren, wenn man genau weiß, was man tut.
t.track.parEin erweiterbares Objekt voller Funktionen, die Wert-Rückgaben aufgrund der jeweiligen Events machen

Events

Grundsätzlich kann man jedes normale DOM-Event verwenden, einschließlich weniger gebräuchlicher Events wie window.onorientationchange beim iPhone. Darüber hinaus hat tiny-track noch folgende Besonderheiten:

init

"init" ist kein normales Event, sondern wird direkt beim Initialisieren aufgerufen; es kann durchaus sein, dass manche Informationen zu dieser Zeit nicht verfügbar sind.

ready

document.ready wird aufgerufen, sobald das DOM fertig ist, d.h. der Ladevorgang an HTML, CSS und JS ist abgeschlossen, lediglich Bilder und iframes können noch nachfolgen.

clickin*/clickout*

Diese Events unterteilen das normale click-Event in solche Clicks, welche die Seite verlassen und solche, die es nicht tun. Diese click-Events werden bei Mausklick ausgelöst. Nur hier und bei mousemove gibt pos vernünftige Werte zurück.

mousemove

Wenn der Mauszeiger für mehr als standardmäßig 5 Sekunden (siehe movetimeout) an einer Stelle verharrt, wird dieses Event ausgelöst.

keydown

In allen Browsern außer dem MSIE wird, wenn man ein Formular durch Druck auf Enter innerhalb eines Felds (außer Textarea) abschickt, der erste button/input-submit-node gesucht und dort ein click-Event generiert. Um auch im IE Formular-Absendungen messen zu können, wird hier implizit (ohne Zutun des Nutzers) das keydown-Event mißbraucht.

Manueller Aufruf

In manchen Fällen möchte man Ereignisse tracken, die nicht direkt mit einem Event verbunden sind. In diesem Fall kann man die Funktion t.track([simuliertes Event]) mit einem simulierten Event aufrufen. In jedem Fall gesetzt sein sollten target (ggf. document), ts (new Date()*1) und type (beliebig, es muss jedoch eine URL mit diesem Typ eingetragen sein).

Tracking-Parameter

Die folgenden Informationen können standardmäßig getrackt werden:

typeEvent-Typ (ready, click, keydown)
urlGegenwärtige Seiten-URL
titleSeiten-Titel
referrerReferrer
durationLadezeit in Millisekunden, bspw. "1413"
screenBildschirm-Auflösung, z.B. "1280x800"
windowFenster-Größe, etwa "1150x600"
client*Browser-Information, bspw. "firefox-3.6.2", benötigt tiny-browser.js
os*System-Information, bspw. "windows nt5.1", benötigt tiny-browser.js
flash*Flash-Version (mit Revisionsnummer), bspw. "10.2"
tsTimestamp in ms (Unix-Zeit)
element*Event-Target-Name und ID/Klasse, etwa "div#test"
posMaus-Position, bspw. "513x411"
linkLink-href, auch von Parent
actionFormular-Action, falls ein solches ausgelöst wird

Man kann diese Tracking-Parameter leicht ergänzen oder überschreiben, indem man auf t.track.par.[name] zugreift, als Werte kann jeder String oder jede Funktion verwendet werden. Leerstrings und alles, was zu false konvertiert, werden samt der dazugehörigen GET-Parameterschlüssel herausgefiltert.

Beispiel

t.track.par.content = function(e) {
    var T=e.target, c;
    while (!c&&(c=(T.innerHTML||T.value).replace(/<[^>]*>/g,''))&&(T=T.parentNode));
    return escape(c.substr(0,29));
};
t.track.par.cpos=function(e){return ((e.mouseX||0)>>3)+'x'+((e.mouseY||0)>>3)};
var slice={cookie: { name: 'dice', date: 63072000000, path: '/', domain: '.'+location.hostname }, chance: 10};
t.track.init([
    { url: '/cgi-bin/tracking.rb?url=${url}&t=${duration}&ua=${client}&ts=${ts}&s=${screen}&w=${window}&fv=${flash}&ev=${type}', type: 'ready', slice: slice },
    { url: '/cgi-bin/tracking.rb?url=${url}&t=${duration}&pos=${cpos}&lnk=${action}&lnk=${link}&ts=${ts}&ev=${type}', type: 'click', slice: slice }
]);

Test-Formular