Olaf: InnerHTML veschluckt <script...>

Hallo zusammen,

ich möchte in einer Datei test.html über

document.body.innerHTML = myhtmlstring;

dem body einen neuen Inhalt zuweisen. Das klappt bis auf den unschönen Nebeneffekt, daß eventuelle Scriptelement unterschlagen werden.

Wenn ich also beispielsweise den Inhalt aus diesem DIV nehmen würde

<div ID=test>
<script DEFER language="javascript">
function test(){
   var x=25;
}
</script>
Das ist der neue Body
</div>

und zuweise

document.body.innerHTML=frame2.document.body.getElementById("test").innerHTML;

dann fehlt im neuen Inhalt des Body die script-Passage.

Wo ist mein Fehler? Was kann ich tun?

Danke

Olaf

  1. Hallo,

    ich möchte in einer Datei test.html über document.body.innerHTML = myhtmlstring;  dem body einen neuen Inhalt zuweisen. Das klappt bis auf den unschönen Nebeneffekt, daß eventuelle Scriptelement unterschlagen werden.

    Das wird im Internet Explorer und möglicherweise auch im Opera seinen Dienst tun, Nutzer von Moz/FF werden in die Röhre schauen dürfen.

    Wenn ich also beispielsweise den Inhalt aus diesem DIV nehmen würde

    <div ID=test>

    ^^^^
    Wo sind die Anführungszeihen?

    <script DEFER language="javascript">

    ^^^^^
    Was bitte ist das?

    function test(){
       var x=25;
    }
    </script>
    Das ist der neue Body
    </div>

    und zuweise

    document.body.innerHTML=frame2.document.body.getElementById("test").innerHTML;

    dann fehlt im neuen Inhalt des Body die script-Passage.

    Offengestanden gehe ich davon aus, daß dort soviele Fehler im Quelltext enthalten sind, daß es vermutlich etliche Fehler sein werden, die das gewünschte Ergebnis verhindern.

    Gruß aus Berlin!
    eddi

    --
    Ed is' nischt neuet - ed heißt je'ß' nua anda's
    1. Hallo Eddi,

      vielleicht hätte ich erwähnen sollen, dass das Ganze nur im Internet Explorer funktionieren muss.

      Offengestanden gehe ich davon aus, daß dort soviele Fehler im >Quelltext enthalten sind, daß es vermutlich etliche Fehler sein >werden, die das gewünschte Ergebnis verhindern.

      Da liegst Du, mit Verlaub, falsch, denn das Script verursacht keinen Fehler und tut seinen Dienst, setzt also den neuen innerHTML im Body, lässt aber eben nur das <script... weg.

      Die Beschreibung für DEFER findest Du hier

      http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/defer.asp

      Viele Grüße

      Olaf

      1. Hi,

        Die Beschreibung für DEFER findest Du hier
        http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/defer.asp

        Nö, die wirkliche Beschreibung des defer-Attributs befindet sich hier: http://www.w3.org/TR/html4/interact/scripts.html#adef-defer

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          Die Beschreibung für DEFER findest Du hier
          http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/defer.asp
          Nö, die wirkliche Beschreibung des defer-Attributs befindet sich hier: http://www.w3.org/TR/html4/interact/scripts.html#adef-defer

          <philosophie>Was ist "wirklich"? Eine Standard-Definition, die niemand beachtet, oder die Definition des Erfinders, die dieser logischerweise auch beachtet?</philosophie> ;-)

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. ich möchte in einer Datei test.html über document.body.innerHTML = myhtmlstring;  dem body einen neuen Inhalt zuweisen. Das klappt bis auf den unschönen Nebeneffekt, daß eventuelle Scriptelement unterschlagen werden.

      Das wird im Internet Explorer und möglicherweise auch im Opera seinen Dienst tun, Nutzer von Moz/FF werden in die Röhre schauen dürfen.

      Warum?

      Mathias

      1. Hallo erstmal!

        Warum?

        die Unterstützung von document.body ist noch nicht so lange implementiert.

        Gruß aus Berlin!
        eddi

        1. Hallo,

          Das wird im Internet Explorer und möglicherweise auch im Opera seinen Dienst tun, Nutzer von Moz/FF werden in die Röhre schauen dürfen.

          Warum?

          die Unterstützung von document.body ist noch nicht so lange implementiert.

          Äh, Mozilla kann document.body meines Wissens schon seit des frühesten Alpha-Versionen, mindestens aber seit Versin 1.0. Firefox kann es entsprechend ebenfalls seit Anbeginn des Firefox-Projektes. document.body ist DOM 1 HTML. Ich würde daher behauptet, dass es keinen Mozilla bzw. Firefox gibt, der document.body nicht kennt.

          Mathias

    3. Hi,

      <div ID=test>
                 ^^^^
      Wo sind die Anführungszeihen?

      Sind bei HTML hier optional.

      <script DEFER language="javascript">
                 ^^^^^
      Was bitte ist das?

      MS-HTML ("Script ohne Bildschirmausgabe"), das den IE anweist, daß er nicht (wie sonst üblich) zuerst das Script abarbeiten soll, sondern daß während des Abarbeitens parallel auch bereits die Seite weiter gerendert werden kann.

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      1. Hi,

        <script DEFER language="javascript">
                   ^^^^^
        Was bitte ist das?
        MS-HTML ("Script ohne Bildschirmausgabe"),

        Nö, ganz normales HTML.
        Siehe http://www.w3.org/TR/html4/interact/scripts.html#edef-SCRIPT

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          Nö, ganz normales HTML.

          Oh, Du siehst mich verblüfft. :-)) Dann muß es wohl heißen: Streiche "MS-HTML", setze "ehemals MS-proprietäres HTML"!?

          Wird das Attribut denn von irgendeinem Browser jenseits des IEs auch beachtet? Oder ist das ansonsten eher der Gattung der in der Rec definierten META-Angabe des Script-Typs zuzuordnen (à la "schön, daß wir es mal definiert haben")? ;->

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      2. Hallo,

        MS-HTML ("Script ohne Bildschirmausgabe"), das den IE anweist, daß er nicht (wie sonst üblich) zuerst das Script abarbeiten soll, sondern daß während des Abarbeitens parallel auch bereits die Seite weiter gerendert werden kann.

        Naja, ist das wirklich so?

        »The presence of this attribute will instruct IE to defer the loading of a script until after the DOM has loaded.« http://dean.edwards.name/weblog/2005/09/busted/

        Das ist doch das genaue Gegenteil von »Abarbeiten, während die Seite weiter gerendert wird«? Die Seite wird erst fertig gerendert, dann wird das Script aufgerufen. Kein paralleles Ausführen des Scripts und Parsen des HTML-Codes.

        Mathias

        1. Hi,

          Naja, ist das wirklich so?

          Gegenfrage: Ist es etwa blauäugig anzunehmen, daß Microsoft solche Vorgänge sinnvollerweise parallelisiert?

          Hmm - OK, ich ziehe die Bemerkung zurück! >;->

          Die Seite wird erst fertig gerendert, dann wird das Script aufgerufen. Kein paralleles Ausführen des Scripts und Parsen des HTML-Codes.

          Einigen wir uns auf ein schlichtes: Der Browser wartet beim Rendern der Seite nicht mehr auf das Abarbeiten des Scripts. :-)

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!