Mit insertBefore() eingefügtes <script>-Element löscht Seite
Herr Rossi
- javascript
0 MudGuard
0 Herr Rossi0 MudGuard
0 Cybaer0 Herr Rossi2 Cybaer
Hallo,
ich möchte Javascript-Code nachträglich in eine Webseite einfügen. (Konkret geht es darum, je nach tatsächlich verfügbarem Platz den besten Anzeigeort zu wählen. nb: Ich habe keine Möglichkeit, den einzufügenden Code zu ändern.)
Dazu erstelle ich ein <script>-Element mittels createElement(), lasse Code in das Element einfügen, der seinerseits unter anderem document.write() enthält, und klebe das Resultat mittels insertBefore() an die gewünschte Position.
Das Problem:
Sobald das neue Element das enthaltene document.write() ausführt, wird die Seite komplett gelöscht und durch den von document.write() ausgegebenen Inhalt ersetzt.
Ich hätte natürlich stattdessen gerne, dass der ausgebene Inhalt sich dort in die bestehende Seite einfügt, wo ich das <script>-Element hingesetzt habe.
var e = basis.create('script', {type: "text/javascript"}, false, 'alert("Hallo");document.write("Hallo 2"); alert("Hallo 3");');
alert("insertBefore()");
basis.insertBefore(e, nachbar);
(Der Code nutzt DOMAssistant, das tut aber nix zur Sache, mit direkten createElement()&Co.-Aufrufen passiert exakt das Gleiche.)
Ablauf ist wie folgt: Es erscheint 'insertBefore()', dann 'Hallo', dann wird der Seiteninhalt durch 'Hallo 2' ersetzt, abschließend erscheint 'Hallo 3'.
Kennt jemand eine Möglichkeit, Javascript-Code, der seinerseits Text in die Seite schreibt, einzufügen, ohne, dass die Seite gelöscht wird?
Danke.
Hi,
Sobald das neue Element das enthaltene document.write() ausführt, wird die Seite komplett gelöscht
Natürlich.
Das ist das bekannte und m.W. auch dokumentierte Verhalten von document.write().
cu,
Andreas
»» Sobald das neue Element das enthaltene document.write() ausführt, wird die Seite komplett gelöscht
Natürlich.
Das ist das bekannte und m.W. auch dokumentierte Verhalten von document.write().
So natürlich kann's nicht sein. Wenn ich das einzufügende <script>-Element direkt in die Seite schreibe, anstatt es per insertBefore() einzuhängen, wird die Seite nicht gelöscht, auch nicht, wenn man per .write() ein <script>-Element mitsamt Code ausgibt, der seinerseits wiederum .write() für anderes nutzt (Verschachtelung à la <script>document.write('<script>document.write("Hallo");</script>'</script>).
Hi,
So natürlich kann's nicht sein. Wenn ich das einzufügende <script>-Element direkt in die Seite schreibe, anstatt es per insertBefore() einzuhängen, wird die Seite nicht gelöscht, auch nicht, wenn man per .write() ein <script>-Element mitsamt Code ausgibt, der seinerseits wiederum .write() für anderes nutzt (Verschachtelung à la <script>document.write('<script>document.write("Hallo");</script>'</script>).
Da ist der entscheidende Unterschied, daß die write()-Aufrufe während des Aufbaus der Seite stattfinden, nicht erst, wenn das Dokument fertig ist.
cu,
Andreas
Hi,
So natürlich kann's nicht sein.
Doch. Ein write() ins offene Dokument macht kein Problem. Wurde das Dokument aber bereits geschlossen (also nach einem close(), was auch automatisch nach dem Laden der Fall ist), impliziert ein write() automatisch erstmal ein open(), was das existierende Dokument löscht.
Und ja, das ist so dokumentiert. AFAIR auch in SELFHTML.
Gruß, Cybaer
Und ja, das ist so dokumentiert. AFAIR auch in SELFHTML.
Nachdem wir ja nun sogar zu dritt festgestellt haben, dass es so nicht funktioniert und dass das auch dokumentiert wäre, bin ich mal gespannt, ob noch jemand vorbeischaut, der seinen Oberlehrer-Zeigefinger in der Tasche lassen kann und sich mit der eigentlichen Frage beschäftigt, wie ich den Code wohl unfallfrei in die Seite bekommen könnte.
Obwohl - nach diesem Text vermutlich nicht mehr. Mit Zeigefinger in der Tasche tippt es sich ja auch schlecht ;>
Hi,
Nachdem wir ja nun sogar zu dritt festgestellt haben, dass es so nicht funktioniert und dass das auch dokumentiert wäre, bin ich mal gespannt, ob noch jemand vorbeischaut, der seinen Oberlehrer-Zeigefinger in der Tasche lassen kann und sich mit der eigentlichen Frage beschäftigt, wie ich den Code wohl unfallfrei in die Seite bekommen könnte.
Offensichtlich nicht, da die Lösung ja wohl selbstverständlich ist, oder?
1. Du weißt jetzt, daß man mit write() in einer Seite nicht nachträglich Elemente einfügen kann - weil das nicht klappt.
2. Du weißt, daß man Elemente nachträglich mittels DOM-Methoden einfügen kann - weil Du es machst.
Also lautet die Lösung
3. Schmeiß das write() raus, und füge das Element, das Du mit write() einfügen wolltest, mit DOM-Methoden ein.
Fragst Du auch noch deine Muttii, wie Du dir den Hintern abwischen mußt, nachdem deine Hand immer dabei braun wird, und sie dir schon beizeiten den Umgang mit Papier beigebracht hat?
Siehst Du! ;>
Gruß, Cybaer
PS: Wer nicht ein klitzekleines bißchen mitdenkt, sollte vielleicht die Finger von Programmierung lassen.