See the blog post titled “Waiting is the Hardest Part” for background on this code.
customTrack Script
var customTrack = {};
customTrack.objTrackingVariables = {
strInteractTrackVars: 'props, eVars, events',
blnBufferOn: false,
blnLoadFail: false,
arrTrackingArray: []
};
customTrack.trackData = (function () {
//Expanding on this part later
return function (strTrackType, strTrackValue) {
if ('undefined' !== typeof(s) && !customTrack.objTrackingVariables.blnBufferOn) {
s.tl(strTrackType, strTrackValue); //fake s.tl() -- see dummy s_code below
} else if (!customTrack.objTrackingVariables.blnLoadFail) {
customTrack.earlyTracking(String(strTrackType), String(strTrackValue));
}
};
}());
customTrack.earlyTracking = (function () {
var objEarlyBuffer = {
blnDataStored: false,
blnIntervalOn: false,
intIntervalCounter: 0,
arrEarlyArray: [],
intervalCheckS: null
};
function sendEarlyTracking() {
var intEarlyBufferCounter = -1;
var arrTrackLink = [];
while (++intEarlyBufferCounter < objEarlyBuffer.arrEarlyArray.length) {
arrTrackLink = String(objEarlyBuffer.arrEarlyArray[intEarlyBufferCounter]).split("|");
customTrack.trackData(String(arrTrackLink[0]), String(arrTrackLink[1]));
}
objEarlyBuffer.blnDataStored = false;
objEarlyBuffer.arrEarlyArray = [];
objEarlyBuffer.blnIntervalOn = false;
if ('undefind' !== typeof(customTrack.objTrackingVariables.blnBufferOn)) {
customTrack.objTrackingVariables.blnBufferOn = false;
}
clearInterval(objEarlyBuffer.intervalCheckS);
}
function sReady() {
objEarlyBuffer.intIntervalCounter++;
if (objEarlyBuffer.blnIntervalOn && objEarlyBuffer.intIntervalCounter > 1200) {
clearInterval(objEarlyBuffer.intervalCheckS);
objEarlyBuffer.blnIntervalOn = false;
customTrack.objOmniVars.blnBufferOn = false;
customTrack.objOmniVars.blnLoadFail = true;
}
if (objEarlyBuffer.blnIntervalOn && 'undefined' !== typeof(s)) {
clearInterval(objEarlyBuffer.intervalCheckS);
objEarlyBuffer.blnIntervalOn = false;
if ('undefind' !== typeof(customTrack.objTrackingVariables.blnBufferOn)) {
customTrack.objTrackingVariables.blnBufferOn = false;
}
sendEarlyTracking();
} else {
return false;
}
}
function bufferEarlyTracking(strTmpTrackString) {
if (!objEarlyBuffer.blnIntervalOn) {
if ('undefind' !== typeof(customTrack.objTrackingVariables.blnBufferOn)) {
customTrack.objTrackingVariables.blnBufferOn = false;
}
objEarlyBuffer.blnIntervalOn = true;
objEarlyBuffer.intervalCheckS = setInterval(sReady, 100);
}
objEarlyBuffer.blnDataStored = true;
objEarlyBuffer.arrEarlyArray.push(strTmpTrackString);
if ('undefined' !== typeof(s) && objEarlyBuffer.arrEarlyArray.length > 0 && !objEarlyBuffer.blnIntervalOn) {
sendEarlyTracking();
}
}
return function (strTrackType, strTrackValue) {
bufferEarlyTracking(String(strTrackType) + "|" + String(strTrackValue));
};
}());
Dummy s_code
var s = {};
s.tl = function (a, b) {
document.trackForm.bufferoutput.value += "Event Type: " + a + " | Event Value: " + b + "\n";
}