642 lines
20 KiB
JavaScript
642 lines
20 KiB
JavaScript
//********************************************************************
|
||
//
|
||
// Copyright (c) 2008 MindLab GmbH
|
||
// All rights reserved.
|
||
//
|
||
//====================================================================
|
||
//
|
||
// Project : Spiegel Online
|
||
// Filename : nm_tr_remote.js
|
||
//
|
||
//====================================================================
|
||
//
|
||
/**
|
||
* @file
|
||
* This script can be used to implement a pixeltracking on your website
|
||
*
|
||
* @author $Felix Engemann$
|
||
* @version $0.0.1$
|
||
* @date $31.08.2006$
|
||
|
||
*@listofchanges cha adaption for postbank help-div 2007/09/07
|
||
*@listofchanges cha adaption for postbank clientStat tracking Pixelhelp-div 2007/11/13
|
||
*@listofchanges cha adaption for postbank clientStat tracking Pixelhelp-div 2007/11/16
|
||
*@listofchanges asc generalisation for netmind 4.0 release 2007/12/10
|
||
*@listofchanges uha Anpassung Spon, kein Tracking JS, da Tracker Cookie genutzt wird
|
||
|
||
*/
|
||
//
|
||
//********************************************************************
|
||
|
||
//********************************************************************
|
||
//config Object
|
||
//********************************************************************
|
||
|
||
function cConfigPixel()
|
||
{
|
||
//-----------------------------------------------------
|
||
// members
|
||
//-----------------------------------------------------
|
||
|
||
//set to true, if you want to get the params automatically
|
||
this.m_bAutoparams = true;
|
||
|
||
//set to true, if you want to send the pixel automatically
|
||
this.m_bAutosend = true;
|
||
|
||
//The protocol to use for getting the pixel, could be either http
|
||
//or https
|
||
this.m_strPixelProtocol = location.href.substr(0, location.href.indexOf(":"));
|
||
|
||
//the servername to get the pixel from (no protocol here, and
|
||
//no path here), you can append a port or prepend an authendication
|
||
//like: user:passwort@myserver.mydomain.com:12345
|
||
//where "user:password@" is the authentication
|
||
// "myserver.mydomain.com" is the fully qualified servername
|
||
// ":12345" is a port-Number
|
||
this.m_strPixelServer = (this.m_strPixelProtocol == "https" ? "count.spiegel.de" : "c.spiegel.de");
|
||
|
||
//the path to request from the given server, this path could of
|
||
//course include CGI-Parameters
|
||
//example: "/mywebbug?thisismyparameter=value"
|
||
this.m_strPixelPath = "/nm_trck.gif";
|
||
|
||
//Send Url by default
|
||
this.m_bSendUrl = true;
|
||
|
||
//Send Referrer by default
|
||
this.m_bSendReferrer = true;
|
||
|
||
//Send MetaTags by default
|
||
this.m_bSendMetaTags = true;
|
||
|
||
//Send Browser Setting, Screen Infos etc.
|
||
this.m_bSendTech = false;
|
||
|
||
//Send Browser Setting, Screen Infos etc.
|
||
this.m_bSendUrlHash = true;
|
||
|
||
//--------------------------------------------------------
|
||
// metatags to be parsed
|
||
//--------------------------------------------------------
|
||
this.m_aMetatag = new Array(
|
||
"sp.*"
|
||
);
|
||
//--------------------------------------------------------
|
||
// Hasht parameter to be parsed
|
||
//--------------------------------------------------------
|
||
this.m_aHashParameter = new Array(
|
||
"ref",
|
||
"from"
|
||
);
|
||
|
||
} // end class cConfigPixel
|
||
|
||
//==========================================================
|
||
// getAutoParams
|
||
//==========================================================
|
||
function config_getSendUrlHash () {
|
||
return this.m_bSendUrlHash;
|
||
}
|
||
|
||
//==========================================================
|
||
// getAutoParams
|
||
//==========================================================
|
||
function config_getAutoParams () {
|
||
return this.m_bAutoparams;
|
||
}
|
||
|
||
//==========================================================
|
||
// getAutoSend
|
||
//==========================================================
|
||
function config_getAutoSend () {
|
||
return this.m_bAutosend;
|
||
}
|
||
|
||
//==========================================================
|
||
// getPixelUrl
|
||
//==========================================================
|
||
function config_getPixelUrl () {
|
||
return this.m_strPixelProtocol+"://"+this.m_strPixelServer + this.m_strPixelPath;
|
||
}
|
||
|
||
//==========================================================
|
||
// getSendUrl
|
||
//==========================================================
|
||
function config_getSendUrl () {
|
||
return this.m_bSendUrl;
|
||
}
|
||
|
||
//==========================================================
|
||
// getSendReferrer
|
||
//==========================================================
|
||
function config_getSendReferrer () {
|
||
return this.m_bSendReferrer;
|
||
}
|
||
|
||
//==========================================================
|
||
// getSendMetatags
|
||
//==========================================================
|
||
function config_getSendMetatags () {
|
||
return this.m_bSendMetaTags;
|
||
}
|
||
|
||
//==========================================================
|
||
// getSendTech
|
||
//==========================================================
|
||
function config_getSendTech () {
|
||
return this.m_bSendTech;
|
||
}
|
||
|
||
//==========================================================
|
||
//Definition of Prototypes
|
||
//==========================================================
|
||
|
||
//methoden zur Klasse hinzufuegen
|
||
cConfigPixel.prototype.getAutoParams = config_getAutoParams;
|
||
cConfigPixel.prototype.getAutoSend = config_getAutoSend;
|
||
cConfigPixel.prototype.getPixelUrl = config_getPixelUrl;
|
||
cConfigPixel.prototype.getSendUrl = config_getSendUrl;
|
||
cConfigPixel.prototype.getSendUrlHash = config_getSendUrlHash;
|
||
cConfigPixel.prototype.getSendReferrer = config_getSendReferrer;
|
||
cConfigPixel.prototype.getSendMetatags = config_getSendMetatags;
|
||
cConfigPixel.prototype.getSendTech = config_getSendTech;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
//********************************************************************
|
||
//Pixel-Object
|
||
//********************************************************************
|
||
//Contstructor for Pixel-Object
|
||
function cRemotePixel(oConfig)
|
||
{
|
||
//-----------------------------------------------------
|
||
// members
|
||
//-----------------------------------------------------
|
||
//pixel object constructor
|
||
//this.m_oImage = new Image();
|
||
this.m_arParameterList = new Array();
|
||
this.m_nParameterCount = 0;
|
||
this.m_strPixelURL = oConfig.getPixelUrl();
|
||
|
||
//Configuration
|
||
this.m_oConfig = oConfig;
|
||
this.hasMetatagParams = false;
|
||
}//end function cRemotePixel()
|
||
|
||
//==========================================================
|
||
//methode fuer Objekt Pixel: Fuegt einen Parameter hinzu
|
||
//==========================================================
|
||
function remotepixel_addParameter(key, value)
|
||
{
|
||
arPair = new Array(key, value);
|
||
this.m_arParameterList[this.m_nParameterCount] = arPair;
|
||
this.m_nParameterCount++;
|
||
}//end function pixel_add_parameter()
|
||
|
||
//==========================================================
|
||
//method for object Pixel: add affiliate
|
||
//==========================================================
|
||
function remotepixel_addAffiliate(name)
|
||
{
|
||
this.addParameter("affiliate", name)
|
||
}//end function remotepixel_addAffiliate(name)
|
||
|
||
//==========================================================
|
||
//method for object Pixel: add url
|
||
//==========================================================
|
||
function remotepixel_addUrl()
|
||
{
|
||
this.addParameter("url", document.URL);
|
||
}//end function remotepixel_addAffiliate(name)
|
||
|
||
//==========================================================
|
||
//method for object Pixel: add referrer
|
||
//==========================================================
|
||
function remotepixel_addReferrer()
|
||
{
|
||
this.addParameter("referrer", document.referrer);
|
||
}//end function remotepixel_addAffiliate(name)
|
||
|
||
//==========================================================
|
||
//methode fuer Objekt Pixel: senden des Pixels
|
||
//==========================================================
|
||
function remotepixel_sendData()
|
||
{
|
||
|
||
strURL = this.m_strPixelURL+"?";
|
||
|
||
for(i=0; i<this.m_arParameterList.length; i++)
|
||
{
|
||
if (i>0) strURL += "&";
|
||
strURL += escape(this.m_arParameterList[i][0])+"="+escape(this.m_arParameterList[i][1]);
|
||
}//end for(i=0; i<this.m_arParameterList.length; i++)
|
||
//now set URL on Pixel
|
||
|
||
if (this.hasMetatagParams) {
|
||
var oTrackingImg = new Image();
|
||
oTrackingImg.src = strURL;
|
||
}
|
||
}//end function remotepixel_sendData()
|
||
|
||
|
||
//==========================================================
|
||
//methode fuer Objekt Pixel: auslesen der techdaten
|
||
//==========================================================
|
||
function remotepixel_getTechData () {
|
||
|
||
//--------------------------------------------------------
|
||
// variables for general settings
|
||
//--------------------------------------------------------
|
||
var javaOK = "unknown";
|
||
var cookiesOK = "unknown";
|
||
var browsLang = "unknown";
|
||
var availheight = screen.availHeight;
|
||
var availwidth = screen.availWidth;
|
||
var colordepth = screen.colorDepth + " bit";
|
||
var height = screen.height;
|
||
var width = screen.width;
|
||
var title = document.title;
|
||
|
||
//--------------------------------------------------------
|
||
// variables for plugins
|
||
//--------------------------------------------------------
|
||
var flashPlugin = "-";
|
||
var flashVersion = "0";
|
||
var directorPlugin = "-";
|
||
var wmplayerPlugin = "-";
|
||
var realplayerPlugin= "-";
|
||
var quicktimePlugin = "-";
|
||
var adobe_svgPlugin = "-";
|
||
var adobe_pdfPlugin = "-";
|
||
|
||
var agt = navigator.userAgent.toLowerCase();
|
||
var ie = (agt.indexOf("msie") != -1);
|
||
//accept only higher than MSIE 4
|
||
//otherwise the detectIE() function would not work
|
||
if(ie) {
|
||
ie = (agt.indexOf("msie 4") == -1) && (agt.indexOf("msie 3") == -1);
|
||
}//end if(ie)
|
||
|
||
var win = ((agt.indexOf("win")!=-1) || (agt.indexOf("32bit")!=-1));
|
||
|
||
//--------------------------------------------------------
|
||
// Java and Cookies
|
||
//--------------------------------------------------------
|
||
if (navigator.javaEnabled()==true){javaOK="yes"}else{javaOK="no"}
|
||
|
||
//--------------------------------------------------------
|
||
//-- cookieEnabled only works in MSIE.
|
||
//--------------------------------------------------------
|
||
if ((navigator.cookieEnabled) && (navigator.cookieEnabled==true)) {cookiesOK="yes"} else {cookiesOK="no"}
|
||
|
||
//--------------------------------------------------------
|
||
// language
|
||
//--------------------------------------------------------
|
||
if (navigator.language)
|
||
browsLang = navigator.language;
|
||
|
||
//--------------------------------------------------------
|
||
// Plugins
|
||
//
|
||
// SVG and Quicktime are not certified Plugins and cause a warning
|
||
// in MSIE 7. Because of this fact those two plugins are not detected.
|
||
// - removed WM Player for same reason
|
||
//--------------------------------------------------------
|
||
if (ie && win) {
|
||
directorPlugin = detectIE("SWCtl.SWCtl.1");
|
||
flashPlugin = detectIE("ShockwaveFlash.ShockwaveFlash.1");
|
||
realplayerPlugin = detectIE("rmocx.RealPlayer G2 Control.1");
|
||
//wmplayerPlugin = detectIE("MediaPlayer.MediaPlayer.1");
|
||
adobe_pdfPlugin = detectIEAcrobat("Acrobat Reader");
|
||
}//end if (ie && win)
|
||
|
||
else {
|
||
nse = "";
|
||
for (var i=0;i<navigator.mimeTypes.length;i++)
|
||
nse += navigator.mimeTypes[i].type.toLowerCase();
|
||
directorPlugin = detectNS(nse, "application/x-director");
|
||
flashPlugin = detectNS(nse, "application/x-shockwave-flash");
|
||
realplayerPlugin = detectNS(nse, "audio/x-pn-realaudio-plugin");
|
||
//wmplayerPlugin = detectNS(nse, "application/x-mplayer2");
|
||
adobe_pdfPlugin = detectNS(nse, "application/pdf");
|
||
}
|
||
|
||
|
||
//save paramters into pixel
|
||
this.addParameter("nm_java", javaOK);
|
||
this.addParameter("nm_cookies", cookiesOK);
|
||
this.addParameter("nm_screen", width + "x" + height);
|
||
this.addParameter("nm_colordepth", colordepth);
|
||
this.addParameter("nm_plugin_flash", flashPlugin);
|
||
this.addParameter("nm_plugin_director", directorPlugin);
|
||
//this.addParameter("nm_plugin_wmplayer", wmplayerPlugin);
|
||
this.addParameter("nm_plugin_realplayer", realplayerPlugin);
|
||
this.addParameter("nm_plugin_acroread", adobe_pdfPlugin);
|
||
this.addParameter("nm_title", title);
|
||
|
||
|
||
}//end function pixel_getTechData ()
|
||
|
||
//==========================================================
|
||
//methode zum Auslesen der metatags
|
||
//==========================================================
|
||
function remotepixel_getMetTags () {
|
||
|
||
|
||
var aMetatag = this.m_oConfig.m_aMetatag;
|
||
|
||
//Save metatags to track into pixel-parameter-list. validation with regexp match
|
||
var strMetaTags = "";
|
||
for (var i = 0; i < document.getElementsByTagName('meta').length; i++) {
|
||
for (var j = 0; j < aMetatag.length; j++) {
|
||
var re = new RegExp(WildToReg(aMetatag[j]));
|
||
if (document.getElementsByTagName('meta')[i].getAttribute('name')) {
|
||
if ( document.getElementsByTagName('meta')[i].getAttribute('name').match(re) ) {
|
||
this.hasMetatagParams=true;
|
||
if (document.getElementsByTagName('meta')[i].getAttribute('content'))
|
||
this.addParameter(document.getElementsByTagName('meta')[i].getAttribute('name'), document.getElementsByTagName('meta')[i].getAttribute('content'));
|
||
else
|
||
this.addParameter(document.getElementsByTagName('meta')[i].getAttribute('name'), "-");
|
||
} // end if document.getElementsByTagName('meta')[i].getAttribute('name').match(re
|
||
} // end if (document.getElementsByTagName('meta')[i].getAttribute('name'))
|
||
}//end for (var j = 0; j < aMetatag.length; j++)
|
||
}//end for (var i = 0; i < document.getElementsByTagName('meta').length; i++)
|
||
}// end method remotepixel_getMetTag
|
||
|
||
|
||
//==========================================================
|
||
//methode zum Auslesen der per Hash angeh<65>ngten Parameter
|
||
//==========================================================
|
||
function remotepixel_getHashParameter () {
|
||
|
||
var aParamList = this.m_oConfig.m_aHashParameter;
|
||
|
||
var strLoc=(document.location+"");
|
||
var nPos=strLoc.indexOf("#");
|
||
if (nPos != -1) {
|
||
var strHashQs=strLoc.substring(nPos+1, strLoc.length);
|
||
aParams = remotepixel_SplitParams(strHashQs);
|
||
//Save metatags to track into pixel-parameter-list. validation with regexp match
|
||
var strHashParam = "";
|
||
for (var j = 0; j < aParamList.length; j++) {
|
||
if ( aParams[aParamList[j]] ) {
|
||
this.addParameter(aParamList[j],aParams[aParamList[j]]);
|
||
} // end if( aParams[aParamList[j]] )
|
||
}//end for (var j = 0; j < aMetatag.length; j++)
|
||
} // end if nPos != -1)
|
||
}// end method remotepixel_getMetTag
|
||
|
||
//==========================================================
|
||
//remotepixel_SplitParams
|
||
//==========================================================
|
||
function remotepixel_SplitParams(params) {
|
||
var result=[];
|
||
var pairs=params.split("&");
|
||
for (var i=0; i < pairs.length; i++) {
|
||
var kv=pairs[i].split("=");
|
||
if (kv[1] && kv[1] != "")
|
||
result[kv[0]]=kv[1];
|
||
else
|
||
result[kv[0]]="-";
|
||
}
|
||
return result;
|
||
}
|
||
|
||
//==========================================================
|
||
//Definition of Prototypes
|
||
//==========================================================
|
||
|
||
//methoden zur Klasse hinzufuegen
|
||
cRemotePixel.prototype.addParameter = remotepixel_addParameter;
|
||
cRemotePixel.prototype.addAffiliate = remotepixel_addAffiliate;
|
||
cRemotePixel.prototype.addUrl = remotepixel_addUrl;
|
||
cRemotePixel.prototype.addReferrer = remotepixel_addReferrer;
|
||
cRemotePixel.prototype.sendData = remotepixel_sendData;
|
||
cRemotePixel.prototype.getTechData = remotepixel_getTechData;
|
||
cRemotePixel.prototype.getMetTags = remotepixel_getMetTags;
|
||
cRemotePixel.prototype.getHashParameter = remotepixel_getHashParameter;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
//==========================================================
|
||
// Acrobat
|
||
//==========================================================
|
||
function detectIEAcrobat(name) {
|
||
|
||
var acrobat=new Object();
|
||
if (window.ActiveXObject) {
|
||
for (x=2; x<10; x++) {
|
||
try {
|
||
oAcro=eval("new ActiveXObject('PDF.PdfCtrl."+x+"');");
|
||
if (oAcro) {
|
||
return 'yes';
|
||
}
|
||
}
|
||
catch(e) {}
|
||
}
|
||
|
||
try {
|
||
oAcro4=new ActiveXObject('PDF.PdfCtrl.1');
|
||
if (oAcro4) {
|
||
return 'yes';
|
||
}
|
||
}
|
||
catch(e) {}
|
||
|
||
try {
|
||
oAcro7=new ActiveXObject('AcroPDF.PDF.1');
|
||
if (oAcro7) {
|
||
return 'yes';
|
||
}
|
||
}
|
||
catch(e) {}
|
||
}
|
||
return 'no';
|
||
}//end function detectIEAcrobat(name)
|
||
|
||
//==========================================================
|
||
// IE Plugins
|
||
//==========================================================
|
||
|
||
function detectIE(ClassID) {
|
||
|
||
try {
|
||
new ActiveXObject(ClassID);
|
||
return 'yes';
|
||
}
|
||
|
||
catch(e) {
|
||
return 'no';
|
||
}
|
||
}//end function detectIE(ClassID)
|
||
|
||
//==========================================================
|
||
// Netscape and Firefox Plugins
|
||
//==========================================================
|
||
function detectNS(strMimetypes, ClassID) {
|
||
if (strMimetypes.indexOf(ClassID) != -1)
|
||
if (navigator.mimeTypes[ClassID].enabledPlugin != null)
|
||
return 'yes';
|
||
return 'no';
|
||
|
||
}//end function detectNS(strMimetypes, ClassID)
|
||
|
||
|
||
//==========================================================
|
||
// Convert Wildcard to RegEx
|
||
//==========================================================
|
||
function WildToReg(str) {
|
||
|
||
s = "";
|
||
for (i = 0; i < str.length; i++) {
|
||
c = str.charAt(i);
|
||
switch(c) {
|
||
case '*':
|
||
s = s + ".*";
|
||
break;
|
||
case '?':
|
||
s = s + ".";
|
||
break;
|
||
|
||
case '(': case ')': case '[': case ']': case '$':
|
||
case '^': case '.': case '{': case '}': case '|':
|
||
case '\\':
|
||
s = s + "\\";
|
||
s = s + c;
|
||
break;
|
||
|
||
default:
|
||
s = s + c;
|
||
break;
|
||
}//end switch(c)
|
||
}//end for (i = 0; i < str.length; i++)
|
||
s = "^" + s + "$";
|
||
return s;
|
||
}//end function WildToReg(str)
|
||
|
||
|
||
//==========================================================
|
||
//function Pixel-Instanz anlegen
|
||
//==========================================================
|
||
function doPixelInstance(oEvent) {
|
||
|
||
oNMConfig = new cConfigPixel();
|
||
oNMRemotePixel = new cRemotePixel(oNMConfig);
|
||
//Send PartnerName as parameter?
|
||
|
||
if(oNMConfig.getAutoParams()) {
|
||
|
||
//Send Url as parameter?
|
||
if (oNMConfig.getSendUrl())
|
||
{
|
||
oNMRemotePixel.addUrl();
|
||
}//end if (SendUrl)
|
||
|
||
//Send Hash Parameter as parameter?
|
||
if (oNMConfig.getSendUrlHash())
|
||
{
|
||
oNMRemotePixel.getHashParameter();
|
||
}//end if (SendUrlHash)
|
||
|
||
//Send referrer as parameter?
|
||
if (oNMConfig.getSendReferrer())
|
||
{
|
||
oNMRemotePixel.addReferrer();
|
||
}//end if (SendReferrer)
|
||
|
||
if(oNMConfig.getSendMetatags()) {
|
||
oNMRemotePixel.getMetTags();
|
||
}
|
||
|
||
if(oNMConfig.getSendTech()) {
|
||
oNMRemotePixel.getTechData();
|
||
}
|
||
} // end autoparams
|
||
|
||
if(oNMConfig.getAutoSend()) {
|
||
oNMRemotePixel.sendData();
|
||
}
|
||
} // end function doPixelInstance
|
||
|
||
|
||
//======================================================================================
|
||
// Load Time Execution
|
||
//======================================================================================
|
||
//
|
||
// Delivered by SpOn
|
||
|
||
if( window.addEventListener ) {
|
||
//alert ("window.addEventListener");
|
||
window.addEventListener('load',doPixelInstance,false);
|
||
} else if( document.addEventListener ) {
|
||
//alert ("document.addEventListener");
|
||
document.addEventListener('load',doPixelInstance,false);
|
||
} else if (window.attachEvent) {
|
||
//alert ("window.attachEvent");
|
||
window.attachEvent('onload', doPixelInstance);
|
||
} else if (document.attachEvent) {
|
||
//alert ("document.attachEvent");
|
||
document.attachEvent('onload', doPixelInstance);
|
||
} else {
|
||
doPixelInstance("");
|
||
}
|
||
|
||
function spNm(params) {
|
||
|
||
if (typeof params == "object" ) {
|
||
oNMConfig = new cConfigPixel();
|
||
oNMRemotePixel = new cRemotePixel(oNMConfig);
|
||
if(oNMConfig.getAutoParams()) {
|
||
|
||
//Send Url as parameter?
|
||
if (oNMConfig.getSendUrl())
|
||
{
|
||
oNMRemotePixel.addUrl();
|
||
}//end if (SendUrl)
|
||
|
||
//Send Hash Parameter as parameter?
|
||
if (oNMConfig.getSendUrlHash())
|
||
{
|
||
oNMRemotePixel.getHashParameter();
|
||
}//end if (SendUrlHash)
|
||
|
||
//Send referrer as parameter?
|
||
if (oNMConfig.getSendReferrer())
|
||
{
|
||
oNMRemotePixel.addReferrer();
|
||
}//end if (SendReferrer)
|
||
|
||
|
||
for (param in params) {
|
||
if (params[param])
|
||
{
|
||
oNMRemotePixel.addParameter(param, params[param]);
|
||
}
|
||
}
|
||
|
||
if(oNMConfig.getSendTech()) {
|
||
oNMRemotePixel.getTechData();
|
||
}
|
||
} // end autoparams
|
||
|
||
|
||
strURL = oNMRemotePixel.m_strPixelURL+"?";
|
||
|
||
for(i=0; i<oNMRemotePixel.m_arParameterList.length; i++)
|
||
{
|
||
if (i>0) strURL += "&";
|
||
strURL += escape(oNMRemotePixel.m_arParameterList[i][0])+"="+escape(oNMRemotePixel.m_arParameterList[i][1]);
|
||
}
|
||
document.write("<img src='"+strURL+"' width='1' height='1' border='0'/>")
|
||
}
|
||
}
|
||
|
||
|