Hi all,
We resolved this by adding a custom code which returns false in the "Customize Page Code" panel of the tool and/or Page Load Rules .
In our case, we don't use Page Load Rules but only Direct Call Rules for all pages : to be able to track pageView on assynchronous loaded content while ensuring all needed data are set even if they are set after the last available Page Load event (domready), we prevent the default pageView tracking by returning false in the "Customize Page Code" panel of Analytics tool, and this after having launched an iterative checking of the requested data wich will then trigger the according Direct Call Rule, like so :
var appVersion = _satellite.getDataElement('AppVersion'), //doWhenReady is a custom fn which execute the toCheck fn every 100 ms for a maximum of 10 times : //toCheck checks that the desired Data Element (dataToCheck) are set and not empty //the todo function is executed as soon as toCheck returns true or at the end of the iteration //(a "DataElementName_missing" value would at least be showing up in my reports so that I can instigate //why this Data Element would still be missing more than 1 second after _satellite script was loaded) doWhenReady = doWhenReady || _satellite.getDataElement('HELPERS doWhenReady'), eventId, dataToCheck = ['UserLoginStatus'], fn = function () {return true;}, tocheck = function (fn) { var i = 0, isOk = true; fn = fn || function () {return true;}; for (i = 0; i < dataToCheck.length; i++) { //Here Data Elements are custom scripts which may return differents empty values var dta = _satellite.getDataElement(dataToCheck[i]); if (dta === '' || dta === {} || dta === dataToCheck[i] + '_missing' || typeof dta === 'undefined' || dta === 'undefined' ) { isOk = false; break; } } return (isOk && fn()) }, todo = function () { _satellite.track(eventId); }; //switch statements for defining which Direct Call Rule to trigger depending on the context, //default to the "pageViewDefault" direct Call rule if (appVersion === 'theVersionToTrack') { switch (_satellite.getDataElement('PageSection')) { case 'products' : case 'shop' : dataToCheck.push('ProductId'); eventId = 'pageViewProductView'; break; case 'register' : switch (_satellite.getDataElement('PageName')) { case 'welcome-to-our-club' : case 'welcome-offer' : eventId = 'pageViewRegistrationComplete'; dataToCheck.push('UserClubMemberId'); break; case 'personal-information' : eventId = 'pageViewRegistrationStart'; break; default: eventId = 'pageViewDefault'; break; } break; case 'checkout': dataToCheck.push('UserClubMemberId'); dataToCheck.push('Cart'); switch (_satellite.getDataElement('PageName')) { case 'shopping-bag': eventId = 'pageViewCheckoutshoppingBag'; break; case 'delivery-setup' : eventId = 'pageViewCheckoutDeliverySetup'; break; case 'order-confirmation' : eventId = 'pageViewCheckoutConfirmation'; dataToCheck.push('OrderId'); break; default : eventId = 'pageViewDefault'; break; } break; //if none of the above condition is met, then do a s.t() through the //default 'pageViewDefault' Direct Call Rule default: eventId = 'pageViewDefault'; break; }; doWhenReady('Check data for ' + eventId, todo, tocheck); } // Returning false here prevents _satellite from executing s.t() by default on any Page Load Rule : //if this code is set to take precedence over UI settings, this means you must have at least one //default Direct Call Rule which does it for all other pages of your website return false;