Usertracking Browser Back history.back() reload
Johannes
- javascript
Hallo,
quäle mich gerade mit folgendem Problem: Möchte User die einen Hypertext zu Physik browsen tracken (Welche Seiten werden aufgerufen, wie lange). Normales Tracking ist ja über die access.log möglich, allerdings erhalte ich so keine Daten über Seiten die durch den Back Button / Zurück Button (und natürlich auch vorwärts) aufgerufen werden.
Einfache Lösungen scheinen nicht zu funktionieren z.B. folgendes in die Meta-Tags:
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
Java Script kann ich nicht besonders, php wäre besser. Gefunden habe ich folgende Idee, die jedoch noch Fehler aufweist:
<head>
...
<meta http-equiv"Content-Script-Type" content"text/javascript">
<script type"text/javascript">
function isMethodType(s)
{
return (s "function" || s "object");
}
</script>
...
</head>
<body onload"if (isMethodType(typeof history.back)) history.back();">
...
</body>
</html>
Theoretisch müsste es ja so funktionieren: Wenn der User den Back-Button nutzt, wird eine Funktion aufgerufen, die zu einem reload der Seite führt. Ist das so möglich? Hinweise, Beispiele, Ideen?
Danke!
Johannes
Moin!
quäle mich gerade mit folgendem Problem: Möchte User die einen Hypertext zu Physik browsen tracken (Welche Seiten werden aufgerufen, wie lange). Normales Tracking ist ja über die access.log möglich, allerdings erhalte ich so keine Daten über Seiten die durch den Back Button / Zurück Button (und natürlich auch vorwärts) aufgerufen werden.
Es ist sogar noch schlimmer: Benutzer öffnen Links auch in neuen Browserfenstern oder Tabs. Und wechseln dann unkontrollierbar zwischen diesen.
Mit anderen Worten: Es ist vollkommen irrelevant, ob du mitbekommst, dass ein Benutzer mit der Zurück-Funktion zu einer vorherigen Seite zurückkehrt, weil er genausogut diese vorherige Seite auch in einem alten Browserfenster offen haben kann - und den Wechsel dorthin kriegst du garantiert nicht mit.
Dein Usertracking müßte im Maßstab von "Big Brother" per Gedankenkontrolle erfolgen, um wirklich genau zu sein. Willst du das? Will das dein Besucher? Gibt der dir die Einwilligung dazu?
Was willst du eigentlich mit den Daten genau machen? Meine Theorie ist, dass solches Usertracking zwar irgendwie ganz tolle Grafiken produzieren kann - aber ansonsten jede Menge Fragen offen läßt - insbesondere beantworten solche Statistiken nicht die Frage, was man an einer Site verbessern könnte.
Dazu müßte man dann wirklich ein richtiges Testlabor einrichten, in dem man Probanden in wirklich allen Aspekten der Seitennutzung erfaßt: Psychologisches Interview, Mausbewegung, Augenbewegung, Verhaltensbeobachtung...
Java Script kann ich nicht besonders, php wäre besser.
Auch das noch! <zusammenbrech/>
- Sven Rautenberg
Lieber Sven,
ja Du hast schon recht, mir ist keine Studie bekannt, die gute Effektstärken und signifikante Unterschiede bzüglich Navigationsverhalten in Hypertexten und Lernerfolg herausgefunden hat. Dennoch gefallen mir beispielsweise die Arbeiten von Priemer der versuchte gewisse aus der Graphentheorie hergeleitete Muster in Zusammenhang mit dem Lernerfolg zu bringen.
e.g. http://www.medienpaed.com/04-1/priemer1.pdf
Andere Studien z.B. die Habilitation von Bannert (e.g. Experiment 2) zeigen, dass Lernende die ihr eigenes Navigationsverhalten reflektieren und zielgerichtet vorgehen einen höheren Lernerfolg aufweisen.
Dennoch, als zusätzliches Mass zu anderen (Interview, offene Fragen, Multiple Choice, Concept Map) möchte ich nicht gerne darauf verzichten und wenn schon, dann möglichst wenig Fehlerbehaftet.
Das mit den Tabs ist kein Problem, da ich die Probanden in unser Testlabor einlade.
Fazit: Es geht mir nicht um schöne Grafiken, aber um Tipps das "zurück-Button" bzw. "Vorwärts-Button-Problem" zu lösen wären hübsch.
Viele Grüße,
Johannes
Moin!
Das mit den Tabs ist kein Problem, da ich die Probanden in unser Testlabor einlade.
Die Info "Ich habe absolut kontrollierte Bedingungen, weil der Browser in einem Testlabor sitzt" wäre gut im Ausgangsposting gewesen. Das ist nämlich ein komplett ungewöhnlicher Fakt. Allgemein ist Usertracking im Internet nämlich mit den von mir geschilderten Problemen behaftet.
Wenn du hingegen dem Benutzer einen Browser "bauen" kannst, kannst du in diesem Browser ja im Prinzip fast alles messen.
Nur mal gesponnen: Wenn du den Browser in den Vollbildmodus schaltest und alle Bedienelemente (auch die Zurück-Taste) in ein Frameset steckst, kannst du die Tastenfunktionen mit Javascript nachbilden - und dabei natürlich auch registrieren und tracken.
- Sven Rautenberg
Hallo Sven,
@Reaktion auf Deinen: stimmt, das hatte ich vergessen. Sorry dafür. Hatte irgendwie das Gefühl, dass in jeder Deiner Antworten eine gewisse Bissigkeit enthalten ist z.B. gleich im ersten Posting:
Java Script kann ich nicht besonders, php wäre besser.
Auch das noch! <zusammenbrech/>
- Sven Rautenberg
Oder auch im zweiten Posting die kritelische Art:
Die Info "Ich habe absolut kontrollierte Bedingungen, weil der Browser >in einem Testlabor sitzt" wäre gut im Ausgangsposting gewesen.
Habe momentan ein Testlabor, hätte aber dennoch gerne eine allgemeine Lösung wenn möglich. Frage leider nicht vor jedem Posting bei Dir an, ob die Schreibe so OK ist...
Das Blocking von Dir hat mich dann eben richtig verärgert. Obige Kommentare von Dir habe ich mit noch mit einem Augenzwinkern abhaken können, in dem Sinne jeder hat eben seinen Stil...
Wenn du hingegen dem Benutzer einen Browser "bauen" kannst, kannst du in diesem Browser ja im Prinzip fast alles messen.
»
Nur mal gesponnen: Wenn du den Browser in den Vollbildmodus schaltest und alle Bedienelemente (auch die Zurück-Taste) in ein Frameset steckst, kannst du die Tastenfunktionen mit Javascript nachbilden - und dabei natürlich auch registrieren und tracken.
Ja.
Johannes
Moin!
Hatte irgendwie das Gefühl, dass in jeder Deiner Antworten eine gewisse Bissigkeit enthalten ist
Richtig beobachtet. Ich bin im allgemeinen negativ gegenüber einer übermäßigen Bespitzelung von Webseitenbesuchern eingestellt. Und dein erstes Posting deutete genau das an: Möglichst alles über den User wissen wollen, am besten auch noch Schuhgröße und Farbe der Unterwäsche.
Java Script kann ich nicht besonders, php wäre besser.
Auch das noch! <zusammenbrech/>
Naja: Alles wissen wollen, und dann essentiell dafür notwendige Techniken nicht beherrschen - darf man da nicht etwas zusammenbrechen. :)
Oder auch im zweiten Posting die kritelische Art:
Die Info "Ich habe absolut kontrollierte Bedingungen, weil der Browser >in einem Testlabor sitzt" wäre gut im Ausgangsposting gewesen.
Das ist absolut ehrlich und genau so zu verstehen gewesen, wie es da steht: Teile IMMER und ohne Ausnahme alle Bedingungen der Fragesituation mit.
Wenn du sagst: "Ich hab hier eine wissenschaftliche Untersuchung 'Aufmerksamkeitslenkung auf Webseiten', und muß die Klickwege der Probanden im Testlabor aufzeichnen - aber wie kriege ich mit, wenn jemand 'zurück' klickt?" - dann ist das etwas vollkommen anderes, als wenn du ganz allgemein eine immer unter allen umständen funktionierende Lösung für das Problem haben willst.
Weil man dann nämlich Dinge in Betracht ziehen kann, die man in der Allgemeinheit "Internet" nicht in Betracht ziehen kann.
Beispiele:
Und dementsprechend kann man alle diese Dinge in deinem Labor genau so manipulieren, dass die Probanden eine möglichst oder exakt identische Surfumgebung vorfinden, und du alle deine Informationen kriegst.
Habe momentan ein Testlabor, hätte aber dennoch gerne eine allgemeine Lösung wenn möglich.
Wie ich ausführte: Eine allgemeine Lösung ist unmöglich. Und hilft dir ja im Moment auch nicht wirklich weiter, weil erstmal eine spezielle Lösung gefragt ist. Als Zusatzaspekt einer zu erarbeitenden Lösung die Allgemeinheit nicht komplett aus dem Blick zu verlieren ist was ganz anderes, als eine allgemeine Lösung zu erarbeiten, die dann in der speziellen Umgebung funktionieren soll.
Frage leider nicht vor jedem Posting bei Dir an, ob die Schreibe so OK ist...
Es geht um die gelieferten oder nicht gelieferten Informationen. Nicht um die Schreibe.
Nur mal gesponnen: Wenn du den Browser in den Vollbildmodus schaltest und alle Bedienelemente (auch die Zurück-Taste) in ein Frameset steckst, kannst du die Tastenfunktionen mit Javascript nachbilden - und dabei natürlich auch registrieren und tracken.
Ja.
Und wenn du ganz fit bist, bastelst du für den Firefox eine XUL-Buttonleiste, die das ebenfalls machen könnte.
- Sven Rautenberg
Guten Abend,
Richtig beobachtet. Ich bin im allgemeinen negativ gegenüber einer übermäßigen Bespitzelung von Webseitenbesuchern eingestellt. Und dein erstes Posting deutete genau das an: Möglichst alles über den User wissen wollen, am besten auch noch Schuhgröße und Farbe der Unterwäsche.
Ok, verstehe, Du hast es in den Überwachungs-Hals bekommen. Stimme dem Vorbehalt im generellen zu, allerdings sehe ich es als schwierig an über ein User-Tracking die Unterwäsche des Users herauszufinden ;) Selbst bei allgemeiner Betrachtung ging es mir nur darum die Back-Button-Nutzung abzufragen und zusätzlich zur allgemein üblichen Zeit, Welche Seiten etc. diesen Punkt hinzuzufügen. Eine mögliche Ausnutzung sehe ich hier selbst bei allgemeiner Anwendung nicht!
Aber fand ich ja wie gesagt alles in Ordnung, nur die Ausbremsung des neuen Postings hat mich dann doch ärgerlich werden lassen.
Danke für beide Hinweise. Spezielle Lösung mit Buttons in Website, die Java-Script-Funktion aufrufen bzw. XUL-Buttonleiste.
Viele Grüße,
Johannes
Lieber Johannes,
Theoretisch müsste es ja so funktionieren: Wenn der User den Back-Button nutzt, wird eine Funktion aufgerufen, die zu einem reload der Seite führt.
warum muss es ein Reload sein? Reicht es Dir nicht, wenn per Javascript eine gefakte Javascript-Datei eingebunden werden soll (oder von mir aus ein neues Bild), wobei über den Request wesentliche Daten an den Server geschickt werden?
Denkansatz (alles ungetestet):
function init() {
// Beginn des Besuches dem document-Objekt anhängen
document.myStartTime = new Date();
}
function track_me () {
var usertime = new Date();
usertime -= document.myStartTime; // Differenz = Aufenthaltsdauer in Millisekunden
var url = document.location;
var requestString = "http://www.example.org/tracker/request.php?url=";
requestString += url;
requestString += "&usertime=" + usertime;
// Die Bild-Variante
var dummy_img = new Image();
dummy_img.src = requestString;
// Die JS-Variante
var dummy_js = document.createElement("script");
dummy_js.href = requestString;
dummy_js.type = "text/javascript";
document.body.insertBefore(dummy_js, document.body.firstChild);
return;
}
Javascript fordert onUnLoad eine Datei an, die folgenden Dateinamen haben könnte: "http://www.example.org/tracker/request.php?url=http://xyz.example.org/page.htm&usertime=1432" an. Das Script "request.php" sendet eine passende Datei zurück (spacer.gif oder eine dummy.js - jenachdem wie Du es implementierst), speichert aber für sich die übermittelten Daten (url und usertime) ab.
Und jetzt kommt das Schönste: Ohne Javascript beim User ist alles umsonst. :-)
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
Javascript fordert onUnLoad eine Datei an, ...
Das klappt nicht zuverlässig. Auch mit javascript. Je nach Browser kann es passieren, dass beim "back" das onunload Event gar nicht aufgerufen wird.
Opera ist so ein Kandidat. Je nach Version (seit der 7er eigentlich konstant 'nicht') geht es, mal nicht.
Viele Grüße,
Jochen
Lieber Maxx,
Das klappt nicht zuverlässig. Auch mit javascript. Je nach Browser kann es passieren, dass beim "back" das onunload Event gar nicht aufgerufen wird.
ich wiederhole mich:
Und jetzt kommt das Schönste: Ohne Javascript beim User ist alles umsonst. :-)
Damit dürfte doch wohl das Vorhaben ad absurdum geführt sein. Daher gilt, was Sven schon völlig zurecht gesagt hat.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Vielen Dank Felix und Maxx.
Schön wäre natürlich eine allgemeine Lösung gewesen, aber
Das mit dem Browser ist nicht so problematisch, solange es auf dem MSIE bzw. Firefox läuft. Ich mache damit nur Untersuchungen an der Uni, insofern weiß ich welche Browser etc.
Melde mich später nochmals.
Hallo Johannes,
Das mit dem Browser ist nicht so problematisch, solange es auf dem MSIE bzw. Firefox läuft.
Folgende Idee:
etwa so:
<head><script type="text/javascript">var chk=0;</script></head>
<body onunload="if(!chk) location.href=location.href;">
<a href="foo.html" onclick="chk=1;">bar</a>
So sollte auch die Prüfung im onunload klappen.
Viele Grüße,
Jochen
Lieber Felix,
habe nun rumprobiert und es scheint so, dass onunload beim Klick auf den Back-Button oder Forward-Button nicht aufgerufen wird?! Wenn ich Die Datei neu lade über reload etc. funktioniert es, d.h. die Datei request.php wird aufgerufen.
Hier die Dateien:
<script type="text/javascript">
var Start = new Date();
var Startzeit = Start.getTime();
function Aufenthalt () {
var Ende = new Date();
var Endzeit = Ende.getTime();
var Aufenthalt = Math.floor((Endzeit - Startzeit) / 1000);
var url = document.location;
var requestString = "http://132.230.140.216/request.php?url=";
requestString += url;
requestString += "&usertime=" + Aufenthalt;
// Die Bild-Variante
var dummy_img = new Image();
dummy_img.src = requestString;
return;
}
</script>
</head>
<body onunload="Aufenthalt()">
<p> </p>
<p><a href="index.html">link zu irgendeiner Seite</a> </p>
<p> </p>
<p> </p>
<p> </p>
</body>
</html>
-------------
<?
Header( "Content-type: image/gif");
$im = imagecreate(200,100);
$blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
ImageFilledRectangle($im,0,0,200,100,$blue);
ImageGif($im);
ImageDestroy($im);
?>
<?php
$filename = 'test';
$somecontent = "Füge dies Datei hinzu $url $usertime \n";
// Sichergehen, dass die Datei existiert und beschreibbar ist
if (is_writable($filename)) {
// Wir öffnen $filename im "Anhänge" - Modus.
// Der Dateizeiger befindet sich am Ende der Datei, und
// dort wird $somecontent später mit fwrite() geschrieben.
if (!$handle = fopen($filename, "a")) {
print "Kann die Datei $filename nicht öffnen";
exit;
}
// Schreibe $somecontent in die geöffnete Datei.
if (!fwrite($handle, $somecontent)) {
print "Kann in die Datei $filename nicht schreiben";
exit;
}
print "Fertig, in Datei $filename wurde $somecontent geschrieben";
fclose($handle);
} else {
print "Die Datei $filename ist nicht schreibbar";
}
?>
Lieber Johannes,
<?
Header( "Content-type: image/gif");
$im = imagecreate(200,100);
$blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
ImageFilledRectangle($im,0,0,200,100,$blue);
ImageGif($im);
ImageDestroy($im);
?>
Das verstehe ich. Du gibst ein Bild aus (GIF). Warum 200x100px? reicht nicht der klassische spacer.gif mit nur einem transparenten Pixel?
Egal.
Was mich nur wundert: Wer soll diese Ausgabe hier erhalten?
<?php
$filename = 'test';
$somecontent = "Füge dies Datei hinzu $url $usertime \n";
...
print "Fertig, in Datei $filename wurde $somecontent geschrieben";
...
} else {
print "Die Datei $filename ist nicht schreibbar";
Diese Ausgabe zerstört doch die Bildausgabe... Oder wird sie in einem anderen Kontext aufgerufen?
Da das Bild niemals angezeigt werden soll, könnte man argumentieren, dass es an sich ja egal ist, was da als Antwort auf den Request folgt... aber es ist Bandbreite und es dauert, wenn doch der Besucher am Verlassen einer Seite ist!
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Lieber Felix,
ja, das Bild hätte man kleiner machen können bzw. gar nicht erst erzeugen können. Wusste nicht, ob das vielleicht nicht doch nötig ist, deshalb mein Halbwissendes Erzeugen des Bildes.
Hast Du noch einen Tipp zwecks des Onlunloads? Habe bemerkt, dass der MSIE es macht, wenn er z.B. eine alert herausgeben soll beispielsweise funktioniert folgendes immer (scheint zumindest bei ca. 30 Versuchen so zusein):
Insofern ist vielleicht die Bilderzeugung doch wichtig?
<script type="text/javascript">
var Start = new Date();
var Startzeit = Start.getTime();
var zurueckVorwaerts=0;
function BrowserButton () {
if (zurueckVorwaerts==0){
var Ende = new Date();
var Endzeit = Ende.getTime();
var Aufenthalt = Math.floor((Endzeit - Startzeit) / 1000);
var url = document.location;
var requestString = "http://132.230.140.216/request.php?url=";
requestString += url;
requestString += "&usertime=" + Aufenthalt;
requestString += "&Endzeit=" + Endzeit;
// Die Bild-Variante
var dummy_img = new Image();
dummy_img.src = requestString;
alert("Bitte verwenden Sie die Zurück und Vorwärts-Pfeile in der jeweiligen Html-Seite.");
return;
}}
Lieber Johannes,
Hast Du noch einen Tipp zwecks des Onlunloads?
da muss ich leider passen. Ich verwende diesen Eventhandler nicht, da ich keine den User bevormundenden Scripte schreibe.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Lieber Felix,
vielen Dank und einen schönen Abend,
Johannes
hi,
nachdem du dich jetzt in einem weiteren Doppelposting über den "nicht sehr hilfreichen Sven Rautenberg" beschwert hast, könntest du allen hier anwesenden doch jetzt bitte mal den Gefallen tun, dir die von eben dem selben stammende, gute und ausführliche Begründung, warum Doppelpostings hier absolut unerwünscht sind, aufmerksam durchzulesen.
Die dort von ihm geäußerte Auffassung dürften viele hier, vermutlich sogar die Mehrheit, ziemlich uneingeschränkt teilen.
Und wenn du dann gelernt hast, dich hier mal etwas weniger wie ein Aufmerksamkeitsterrorist zu benehmen - dann mag sich vielleicht auch mal wieder jemand um dein Problem kümmern, wenn die ständige Ablenkung davon durch deine Doppelpostings und polemischen Antworten auf Bitten diese zu unterlassen mal ihr Ende gefunden hat.
gruß,
wahsaga
Hallo.
Vielleicht siehst du dir das einmal an. Es soll sogar funktionieren.
MfG, at