flo: getElement -> document.write

Beitrag lesen

Das ist schon ein guter Tipp. Aber ein Script muss entsprechend umgeschrieben werden.

Schlecht, weil es ein externes ist.

Mit dem Erfolg das IE8 mit dem Rendern der Seite immer noch auf sich warten lässt (die Differenz mit bzw. ohne kann man mit der Armbanduhr messen, von daher liegen hier wahrscheinlich auch noch andere Probleme)

Wahrscheinlich. Zeig am besten mal ein Beispiel.

und dass die document.write Anweisungen irgendwie nicht im <div id="scriptWrapper" /> ausgeführt werden, sondern eben da, wo das Script-Element erstellt wird

Das ist logisch. Es wundert mich, dass document.write überhaupt etwas dem Dokument hinzufügt. Wenn es asynchron und damit unabhängig vom Parsen des HTML-Codes aufgerufen wird, dann entfernt es den gesamten Dokumentinhalt und ersetzt ihn.

Es wird ja synchron eingehängt.

document.write ist daher bei asynchronen Scripten unbrauchbar (vgl. JavaScript muss asynchron werden). Du müsstest stattdessen mit DOM-Methoden arbeiten, um den Code ins Dokument einzufügen (getElementById, innerHTML o.ä.).

was mich vor allem deswegen irritiert, da es ohne getElementById('scriptWrapper').appendChild('script') überhaupt nicht ausgeführt wird.

Das ist schon richtig. Ein script-Element bloß zu erstellen reicht nicht. Es muss zumindest temporär eingehängt werden.

Mach ich ja. Glaub ich jedenfalls. Hier das kurz zurechtgestutze Beispiel

<html>
<body>

<div id="sourceWrapper">
  <!-- hier sollte die Ausgabe erfolgen... -->
  </div>
  <p>Davor/Danach-Element</p>

<!-- ...aber sie erscheint hier -->

<script type="text/javascript">
    (function () {
      var script = document.createElement('script');
      script.type = 'text/javascript';
      script.async = 'true';
      script.innerHTML = 'document.write("Ausgabe")';
      (document.getElementById('sourceWrapper')).appendChild(script);
    })();
  </script>

<!-- und vielleicht kann mir jemand nebenher noch diese
       sonderbare Klammersyntax eläutern -->

</body>
</html>

was ich in abgeänderter Form aus genau dem zitierten Artikel habe. Nur dass dort das Script in den Header verfrachtet wird und die Ausgabe dann in meinem Fall gleich nach dem öffnenden body-Tag erscheint.