"document.write" und Nebenwirkungen
Fridtjof
- javascript
Hallo ihr lieben JavaScript begabten,
ich hab da ein ziemliches Problem.
Ich habe um die größe meines Quellcodes zu verringern ein JavaScript geschrieben, das den alten HTML-Code ersetzen soll. Das habe ich gelöst, indem ich mittels "document.write" einen neuen, mit dem aus der ursprünglichen HTML-Datei identischen, Code erstelle.
Das Problem ist, das der Code der neuen Datei, obwohl er im Endergebnis genau so aussieht, wie der Alte, nicht das selbe tut.
Der Code greift auf eine seperate JS-Datei zurück, um Dynamisches HTML zu erzeugen. Und genau hier wird der Fehler Sichtbar. Ich habe "onMouseOver" befehle in das Menü eingebaut, die auch einwandfei funktionieren. Wenn ich nun aber auf einen Menüpunkt klicke, wird das Skript falsch verarbeitet, da einer der Nötigen Werte fälschlicher Weise "Null oder kein Objekt" ist. In der Version, die nich von "document.write" generiert wird, gibt es dieses Problem nicht.
Währe klasse, wenn mir jemand weiterhelfen kann.
Die Adresse der funktionierenden Datei ist: web-sorcerer.de/index.html
Die andere findet ihr unter: web-sorcerer.de/index_neu.html
Für den Fall, das sich jemand die Dateien ansehen möchte, hab ich ein 4kb großes Ace-File unter "web-sorcerer.de/index.ace" mit beiden Dateien Online gestellt.
Erwähnenswert ist wohl noch, dass das Skript nur im InternetExplorer funktioniert.
Bitte helft mir, ich weiß echt nicht mehr weiter.
Fridtjof
Hallo Fridtjof,
ich würde mir ja gerne das ACE-Archiv herunterladen, aber es scheint beschädigt zu sein. Könnte es sein, dass du es aus Versehen im ASCII-Modus übertragen hast?
Viele Grüße
Patrick Canterino
Ich Hab das ACE-Archiv jetzt unter
http://web-sorcerer.de/ace/index.ace
gespeichert.
Habauch versucht es runterzulanden und es hat geklappt.
Ich denke es lag daran, das ich es ins htdocs-Verzeichnis gelegt hab.
Hallo Fridtjof,
es funktioniert aber immer noch nicht! XAce meldet, dass es beschädigt ist.
Viele Grüße
Patrick Canterino
Jetzt geht's! Es hing damit zusammen, dass XAce mit Ace 2.0 nicht zurecht kommt!
Ich hab dir die Dateien mal per Mail geschickt.
Was ist denn XACE?
Hallo Fridtjof,
Ich hab dir die Dateien mal per Mail geschickt.
Es hat auch so funktioniert, wie du hier siehst:
<?m=30416&t=5445>
Was ist denn XACE?
Ein Programm, um ACE-Archive zu entpacken. Ich hatte es mal auf einer CD gefunden. Aber es ist veraltet-
Viele Grüße
Patrick Canterino
Mist tut mir leid. Ich hab den Fehler selbst gefunden. Man muß die Seite einmal Neuladen, dann geht es.
Hallo! Ein ähnliches Problem hatte ich auch immer wieder. Der Trick ist, daß du den HTML-Code für den document.write-Befehl in einer Variable angeben mußt.
Dabei gelten einige Regeln: Doppelte und einfache Hochkommata (" oder ') können Probleme verursachen, weil sie als Ende des Variableninhaltes interpretiert werden. Abhilfe: weglassen.
Zeilenumbrüche (automatisch oder mit CR/LF erzwungen) können viele JS-Interpreter nicht korrekt verarbeiten. Abhilfe: Zeilenumbruch erzwingen und als letztes Zeichen der Zeile ein backslash ( \ ) setzen.
Browser verarbeiten in JS nur lupenreines HTML. Im "Normalmodus" werden kleine Fehler toleriert (fehlende Ende-Tags, falsch geschriebene Attribute), im JS-Befehl führt sowas sofort zu Fehlern. Abhilfe: Code ganz genau prüfen! (tust du ja sowieso ;-)
Eine meiner Seiten (www.morphion.de) wird auf die gleiche Weise erstellt, wie du es wahrscheinlich vorhast. Es funktioniert, aber ist relativ unsicher. Es ist ziemlich umständlich, in so erstellte Seiten kleine JS-Spielereien einzubauen. Außerdem verweigert Opera bei schlechtem Wetter die Anzeige der Seite.
Alles in allem werde ich das nicht wieder tun, sondern mir ein Programm schreiben, das den zusätzlichen HTML-Code gleich vor dem Hochladen in die .html-Files einfügt - und werde in den sauren Apfel beißen, bei jeder Änderung jede Datei neu hochzuladen. Ach ja, ich habe keine Möglichkeit für Server-Skripte - vielleicht würden die dir weiterhelfen (PHP, CGI etc.)
Grüße Johan
Danke, die meisten Dinge hab ich bereits so wie du sagst.
Eine Frage: Kann ich bedenkenlos " für Hochkommata (" oder ') verwnden, oder sollich das auch lieber weglassen?
PHP bzw. CGI ünterstützt mein Server leider auch nicht.
Ich werde das mit den Variablen mal versuchen.
Ich hab inzwischen herausgefunden, dass das Script erst vernünftig verarbeitet wird, wenn die Site nach der Erstellng einen reLoad macht. ich hab da zwar eine Idee wie ich das machen kann, jedoch wird so die Seite nicht aus dem Cache geladen.
Kann mir jemand sagen, wie die Seite (wenn möglich) aus dem Cache neugeladen werden kann?