Internet Explorer und JavaScript Weiterleitung – Wo ist der Referer?

Jeder, der schon mal eine Weiterleitung per JavaScript gemacht hat, und prüfen musste, woher der User kommt, hat sich mit Sicherheit schon einmal diese Frage gestellt: Wo zur Hölle ist der Referer?
Fakt ist: bis hin zum IE 8 gibt es einen Bug (oder ein Feature?) diesbezüglich: Bei einer Weiterleitung mittels JavaScript über document.location.href wird der Referer schlicht und ergreifend verschluckt und bleibt undefiniert. Äußerst ärgerlich, wenn man zufällig darauf angewiesen ist. Es gibt allerdings dazu einen kleinen Workaround, mit Hilfe dessen auch der IE die Herkunft preisgibt.

Und zwar trickst man den Internet Explorer einfach dadurch aus, dass man ihm das Klicken eines herkömmlichen Links vorgaukelt. Gefunden habe ich diese Lösung hier, eine etwas angepasste Version gibt es hier.
Das Script dazu sieht also folgendermaßen aus:

1
2
3
4
5
6
7
8
9
10
11
12
<script language="JavaScript1.2" type="text/javascript">
function redirect(url) {
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
		var referLink = document.createElement("a");
		referLink.href = url;
		document.body.appendChild(referLink);
		referLink.click();
	} else {
		document.location.href = url;
	}
}
</script>

Während alle normalen Browser einfach die location.href setzen können, wird im IE zuerst ein Link erzeugt, der dann “geklickt” wird. In diesem Falle hat der IE dann auch keine Probleme mehr, den Referer mitzuschicken…
Hinweis: das Ganze funktioniert erst, wenn document.body definiert ist. Soll die Weiterleitung automatisch beim Laden der Seite stattfinden, darf der Funktionsaufruf erst im body-Tag stattfinden. Im head-Tag ist document.body noch nicht definiert – das Script erzeugt einen Fehler und wird nicht weiter ausgeführt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.