[ASP/ javascript] Tracken van download links

Pagina: 1
Acties:
  • 55 views sinds 30-01-2008

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Mijne heren, dames,

ik ben momenteel bezig met een statistiekentooltje te proggen in ASP/ javascript. Ik ben zover dat ik alle systeeminfo en klikpaden (op IP adres) registreer en bewaar (in een Access databaseje voorlopig).

Om te kijken hoe eea eruit moet zien, heb ik de features een aantal "grote jongens" bekeken. Indextools heeft een hele leuke: zij tracken (en registreren) ook wanneer iemand op een downloadlink (bv. http://www.mijnsite.com/files/bestandje.zip) klikt.

Om te kijken hoe dit werkt heb ik het .js bestand dat Indextools naar de client stuurt, gedownload (zie hieronder). Ik heb best enige javascript kennis, maar dit gaat mijn pet echt te boven. Vooral omdat alle variabele- en functienamen afgekort zijn (om kb's te besparen natuurlijk) is het moeilijk lezen.

Ik ben al flinke tijd bezig geweest eea te doorgronden, maar loop toch vast. Ik neem in ieder geval aan dat de functie getFileName(x) er iets mee te maken heeft (8> , maar hoe:

- definieren ze download links (dus: .zip, .tar.gz, .exe etc)
- submitten ze deze info zonder de pagina te reloaden?

Hieronder staat een voorbeeldje van de uiteindelijke bedoeling:

Afbeeldingslocatie: http://www.indextools.com/images/static/visitpath_240.gif

Zou iemand onderstaande code eens willen bekijken en een stap in de goede richting aangeven?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
var BU = 'http://stats.indextools.com/p.pl?a=100014';
var _ud = "undefined";
var IT = "";
var olt = false;
var img = new Image();
var na = (navigator.appName == "Netscape");

function __e(m,u,l)
{
    var url = 'http://members.indextools.com/p.pl?a=100014&ua='+escape(navigator.userAgent);
    url+="&JsErrorUrl="+escape(u);
    url+="&JsErrorLine="+escape(l);
    url+="&JsErrorMsg="+escape(m);
    url+="&JsErrorAppcode="+escape(navigator.appCodeName);
    url+="&JsErrorApp="+escape(navigator.appName);
    url+="&JsErrorVer="+escape(navigator.appVersion);
    url+="&JsErrorUsr="+escape(navigator.userAgent);
    url+="&b=JSERROR";
    url+="&f=" + escape('file: '+u+' / msg: '+m+' / line: '+l);
    img.src = url;
}

__oe = window.onerror;
window.onerror = __e;


if (typeof ACTION != _ud)
{
    IT += "&x=" + escape(ACTION);
    ACTION = '';
}
else
    var ACTION = '';
if (typeof AMOUNT != _ud)
{
    IT += "&xa=" + escape(AMOUNT);
    AMOUNT = '';
}
else
    var AMOUNT = '';
if (typeof MEMBERID != _ud)
    BU += "&m=" + escape(MEMBERID);
if (typeof DOCUMENTGROUP != _ud)
    BU += "&c=" + escape(DOCUMENTGROUP);
if (typeof DOCUMENTNAME != _ud)
    BU += "&b=" + escape(DOCUMENTNAME);
else if (document.title.length > 0)
    BU += "&b=" + escape(document.title);
var itDate = new Date();
IT += "&d=" + escape(itDate.toGMTString());
IT += "&n=" + escape(parseInt(itDate.getTimezoneOffset() / 60));
var ecl = '';
if (typeof EXCL != _ud)
    ecl = EXCL;
function gcpn(x)
{
    var z = location.search;
    var i = z.indexOf("?" + x + "=");
    var j = z.indexOf("&" + x + "=");
    if ((i == 0) || (j > -1))
    {
        var k = (i == 0) ? 0 : j;
        var l = z.indexOf('&', k + 1);
        return z.substring(k + 2 + x.length, (l > -1) ? l : z.length);
    }
    return '';
}

function getFileName(x)
{
    return (x.substring(x.lastIndexOf("/") + 1, x.length));
}

function gh(x)
{
    var i = x.host.indexOf(":");
    return (i >= 0) ? x.host.substring(0, i) : x.host;
}

function gpr(x)
{
    var y = x.protocol;
    var i = y.indexOf(":");
    return (i >= 0) ? y : y + ":";
}

function gp(x)
{
    var y = x.pathname;
    var i = y.indexOf("/");
    return (i == 0) ? y : "/" + y;
}

function mxDmnRGXP(v)
{
    return new RegExp(mxRgXpStr(v), "i");
}

function mxR(e, _x, _y, _z)
{
    i = 0;
    while (e.indexOf(_x) >= 0)
    {
        i++;
        e = e.replace(_y, _z);
        if (i > 50)
            break;
    }
    return e;
}

function mxRgXpStr(e)
{
    e = mxR(e, " ", " ", "");
    e = mxR(e, "\*\.", "\\*\\.", "\*");
    e = mxR(e, ",\*", ",\\*", "|");
    e = mxR(e, "*", "*", "");
    e = mxR(e, ",", ",", "|^");
    e = mxR(e, ".", "\\.", ";");
    e = mxR(e, ";", ";", "\\.");
    return e;
}

function exitLink(x)
{
    if (gh(location) == gh(x))
        return true;
    var pt =
        (typeof DOMAINS != _ud) ? mxDmnRGXP(DOMAINS) : mxDmnRGXP(gh(location));
    a = (ACTION == '') ? "" : "&x=" + escape(ACTION);
    xa = (AMOUNT == '') ? "" : "&xa=" + escape(AMOUNT);
    ln = escape(x.href);
    if (pt.test(gh(x)))
        return true;
    if (na)
        setTimeout("img.src=BU+xa+a+'&el='+ln;", 1);
    else
        img.src = BU + xa + a + '&el=' + ln;
    return true;
}

function oco(x, y)
{
    var i = 0;
    var rv = true;
    while (document.links[i] != x)
    {
        i++;
    }
    if (y.li[i])
        rv = y.li[i].oc();
    fn = getFileName(x.pathname);
    if (fn != "")
    {
        var pt = new RegExp ("\..?html?|\.asp|\.cfm|\.jsp|\.cgi|\.php[3-4]?|\.pl|\.taf|\.dll|\.vm|jsessionid", "i");
        if ((!pt.test(fn)) && (fn.indexOf(".") != -1))
        {
            if (((ecl.length > 0) && (!mxDmnRGXP(ecl).test(x.pathname))) ||
                (ecl.length == 0))
            {
                a = (ACTION == '') ? "" : "&x=" + escape(ACTION);
                xa = (AMOUNT == '') ? "" : "&xa=" + escape(AMOUNT);
                fn = gpr(x) + "//" + gh(x) + gp(x);
                if (na)
                    setTimeout("img.src=BU+xa+a+\"&fn=\"+escape(fn);", 1);
                else
                    img.src = BU + xa + a + "&fn=" + escape(fn);
            }
        }
        else
            exitLink(x);
    }
    else
        exitLink(x);
    return rv;
}

function olo()
{
    if (olt)
        ool();
    lnks = new Object();
    var ln = document.links.length;
    lnks.li = new Array(ln);
    for (var i = 0; i < ln; i++)
    {
        if (document.links[i].onclick)
        {
            lnks.li[i] = document.links[i];
            lnks.li[i].oc = document.links[i].onclick;
        }
        eval("document.links[i].onclick=function(){return oco(this,lnks);}");
    }
}

ns = (navigator.appName.substring(0, 9) == "Microsoft");
if (((window.screen) || ((new Array()).toSource) || ((new Array()).shift && ns))
    && (navigator.userAgent.indexOf('Mac') < 0))
{
    if (window.onload)
    {
        ool = window.onload;
        olt = true;
    }
    window.onload = olo;
}

function _e()
{
    _rf(false);
    return true;
}

_rf(true);
function _rf(_d)
{
    r = "";
    if ((navigator.userAgent.indexOf('Mac') >= 0) &&
        (navigator.userAgent.indexOf('MSIE 4') >= 0))
        r = document.referrer;
    else if (_d)
    {
        window.e = window.onerror;
        window.onerror = _e;
        r = (document.location ==
             top.location) ? document.referrer : top.document.referrer;
    }
    else
        IT += "&nr=t";
    window.onerror = window.e;
    if (r.length > 0)
        IT += "&e=" + escape(r);
    BU += "&f=" + escape(window.document.location);
    document.cookie = "itc=t";
    IT += "&g=" + escape(na ? navigator.language : navigator.userLanguage);
    IT += "&h=" + escape((navigator.javaEnabled()? 'Y' : 'N'));
    IT += "&j=" + escape(screen.width + 'x' + screen.height);
    IT += "&k=" + escape((ns) ? screen.colorDepth : screen.pixelDepth);
    IT += "&l=" + ((document.cookie.indexOf("itc=") >= 0) ? "true" : "false");
    if ((typeof CAMPAIGN != _ud) && (CAMPAIGN != ''))
        IT += "&cp=" + escape(CAMPAIGN);
    if ((typeof CMPPARM != _ud) && (CMPPARM != ''))
        IT += "&cp=" + escape(gcpn(CMPPARM));
    if ((typeof PROMO != _ud) && (PROMO != ''))
        IT += "&scp=" + escape(PROMO);
    if ((typeof PROMOPARM != _ud) && (PROMOPARM != ''))
        IT += "&scp=" + escape(gcpn(PROMOPARM));
    img.src = BU + IT;
    document.write("<\!--");
}
window.onerror = __oe;


bericht eerder vandaag gepost in webdesign & graphics, maar hier eigenlijk beter op z'n plaats. Voortaan eerst nadenken, dan pas submitten |:(

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

eentje is genoeg : [rml][ javascript] tracken van downloadlinks[/rml]

Als je 'm verplaatst wilt hebben moet je dat aanvragen in SM, maar in dit geval gaat het toch echt over het doorgronden van een stuk javascript. Dit hoort thuis in W&G. Als je serverside wilt gaan loggen (Dus zonder javascript) zou je er hier een topic over kunnen openen, maar deze functionaliteit zit meestal al wel in de webserver. Veel tools parsen de logs die de webserver maakt en maken hier een mooi overzichtje van. Hoe dat allemaal in zijn werk gaat zou je mischien eerder in I&T of SA kunnen vragen..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Dit topic is gesloten.