document.getElementById wird im IE mit einem Fehler beendet
nachtgarm
- javascript
Moin Leute.
Ich habe seit kurzem die Stelle des Webmasters eines großen Fotoonlinedienstes übernommen und arbeite mich nun nach und nach ein, da der ehemalige Webmaser nicht mehr "verfügbar" ist um Fragen zu beantworten. Aber zu meine Problem:
Wir haben eine Seite auf der neue Mitglieder getracked werden und dann auf die jeweilige Landingpage umgeleitet werden. Dies funktioniert im Firefox, als auch im Chrome super, allerdings wird im IE (7 & 8) der redirect mit folgendem Fehler abgebrochen:
Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
Der Code, der dahinter steckt sieht wie folgt aus:
<!-- Redirection -->
<script type="text/javascript">
if(document.getElementById("reURL").firstChild.data==""){
reURL = "/";
}
else{
reURL = document.getElementById("reURL").firstChild.data;
}
window.location.href=("reURL");
</script>
<!-- Redirection END -->
Die ID "reUrl" wird dabei in Perl wie folgt im CMS deklariert:
use CGI;
my $q = new CGI;
my $reURL = $q->param("reURL");
Ich habe noch eine Bspl. URL beigefügt, auf der das Tracking und der anschließende Redirect nachvollzogen werden kann.
Da ich, wie schon erwähnt, recht neu auf dem Gebiet bin, stehe ich etwas ratlos vor diesem Problem. Kann mir einer von euch Helfen?
Dank und Gruß
nachtgarm
Hi,
Wir haben eine Seite auf der neue Mitglieder getracked werden und dann auf die jeweilige Landingpage umgeleitet werden. Dies funktioniert im Firefox, als auch im Chrome super, allerdings wird im IE (7 & 8) der redirect mit folgendem Fehler abgebrochen:
Und warum geschieht das clientseitig?
Die ID "reUrl" wird dabei in Perl wie folgt im CMS deklariert:
Serverseitiger Code ist bei clientseitigen Problemen nicht hilfreich.
Wie sieht das erzeugte HTML aus?
cu,
Andreas
Hi,
Wir haben eine Seite auf der neue Mitglieder getracked werden und dann auf die jeweilige Landingpage umgeleitet werden. Dies funktioniert im Firefox, als auch im Chrome super, allerdings wird im IE (7 & 8) der redirect mit folgendem Fehler abgebrochen:
Und warum geschieht das clientseitig?
Was passiert Clientseitig? Der Redirect? K.a. um ehrlich zu sein. Ich habe den nicht implementiert, muss Ihn nur unter IE zum laufen bringen.
Die ID "reUrl" wird dabei in Perl wie folgt im CMS deklariert:
Serverseitiger Code ist bei clientseitigen Problemen nicht hilfreich.
Wie sieht das erzeugte HTML aus?
Der Quelltext der beim redirect aufgerufen wird? kannste Dir hier anschauen. Einfach im IE aufrufen und dann Quelltext anzeigen lassen.
cu,
Andreas
Gruß
Steve
Hallo,
Wir haben eine Seite auf der neue Mitglieder getracked werden und dann auf die jeweilige Landingpage umgeleitet werden.
was soll das für einen Zweck haben?
Dies funktioniert im Firefox, als auch im Chrome super, allerdings wird im IE (7 & 8) der redirect mit folgendem Fehler abgebrochen:
Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
Für welche Zeile?
if(document.getElementById("reURL").firstChild.data=="")
Ist sichergestellt, dass ein Element mit der ID "reURL" existiert?
Ist sichergestellt, dass es mindestens ein Kindelement hat?
Ich ahne irgendwie, dass es damit zusammenhängt, dass der IE reine Textknoten nicht sauber aufdröselt, bzw. sie nicht als nodes im Sinne von FirstChild zählt.
window.location.href=("reURL");
Die Klammerung ist hier überflüssig.
Die ID "reUrl" wird dabei in Perl wie folgt im CMS deklariert:
use CGI;
my $q = new CGI;
my $reURL = $q->param("reURL");
Und was kommt dabei für den Client wirklich heraus?
So long,
Martin
--
Zwei Mäuse treiben's miteinander. Sagt der Mäuserich: "Hoffentlich ist nicht wieder alles für die Katz."
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Hallo,
Wir haben eine Seite auf der neue Mitglieder getracked werden und dann auf die jeweilige Landingpage umgeleitet werden.
was soll das für einen Zweck haben?
Das ist ein Tracking für Google und SearchIgnite, um Kampagnen besser steuern zu können.
Dies funktioniert im Firefox, als auch im Chrome super, allerdings wird im IE (7 & 8) der redirect mit folgendem Fehler abgebrochen:
Das Objekt unterstützt diese Eigenschaft oder Methode nicht.Für welche Zeile?
IE meckert immer Zeile 2794 an
if(document.getElementById("reURL").firstChild.data==""){
if(document.getElementById("reURL").firstChild.data=="")
Ist sichergestellt, dass ein Element mit der ID "reURL" existiert?
Ist sichergestellt, dass es mindestens ein Kindelement hat?Ich ahne irgendwie, dass es damit zusammenhängt, dass der IE reine Textknoten nicht sauber aufdröselt, bzw. sie nicht als nodes im Sinne von FirstChild zählt.
window.location.href=("reURL");
Die Klammerung ist hier überflüssig.
Natürlich! Wurde bereits entfernt.
Die ID "reUrl" wird dabei in Perl wie folgt im CMS deklariert:
use CGI;
my $q = new CGI;
my $reURL = $q->param("reURL");
>
> Und was kommt dabei für den Client wirklich heraus?
Verstehe die Frage nicht...
>
> So long,
> Martin
>
reURL = document.getElementById("reURL").firstChild.data;
Der IE, zumal wenn du sämtliche neueren per X-UA-Compatible in den IE-7-Modus schickst, legt automatisch globale Variablen an, wenn du einem Element eine ID gibst.
Das heißt, es gibt window.reURL schon, diese Eigenschaft verweist auf dasselbe Element wie document.getElementById("reURL").
Diese globale Variable kannst du nicht überschreiben. Es gibt einen Fehler, wenn du das versuchst.
Lektionen daraus:
1. Nie eine globale Variable anlegen, die wie eine ID eines Elements heißt.
2. Ferner: Am besten nie irgendwelche globale Variablen anlegen. Am besten alles wegkapseln und nur sehr kontrolliert globale Objekte erzeugen.
Besser wäre es mit einer sofort ausführenden Funktion (in Nerdkreisen auch immediately-invoked function expression - IIFE - genannt). Darin kannst du lokale Variablen anlegen, ohne dass der globale Namensraum in Mitleidenschaft gezogen wird:
<script type="text/javascript">
[code lang=javascript](function () {
var el = document.getElementById('reURL');
var url = '/';
if (el && el.firstChild) {
url = el.firstChild.data;
}
window.location.href = url;
})();
</script>[/code]
window.location.href=("reURL");
Dir ist klar, dass diese Zeile nicht macht, was du willst?
Du willst vermutlich keinen String, sondern den Variablenwert zuweisen.
Allgemein frage ich mich, warum du die URL in ein verstecktes HTML-Element hineinschreibst, um es dann mit JavaScript auszulesen. Du kannst es auch direkt in eine JavaScript-Variable schreiben. In allen Fällen musst du natürlich darauf achten, dass du Daten aus der URL nicht ohne angemessenes Maskieren in den HTML- bzw. JavaScript-Code schreiben kannst.
Mathias
In allen Fällen musst du natürlich darauf achten, dass du Daten aus der URL nicht ohne angemessenes Maskieren in den HTML- bzw. JavaScript-Code schreiben kannst.
Du hast dir eine Cross-Site-Scripting-Sicherheitslücke gebaut. Du solltest das schleunigst beheben!
http://www.photobox.de/tracking/redirect-register?reURL=%3Cscript%3Ealert('hallo')%3C/script%3E
http://www.photobox.de/tracking/redirect-register?reURL=javascript:alert('hallo')
Mathias