Aktuelle Informationen rund um TYPO3

JS-Error in IE, Totalabbruch

Letzte Woche habe ich versucht, einen JavaScript-Fehler zu beheben, der im IE auf einer Seite auftrat, die wir vor längerer Zeit mit recht vielen JavaScript-Elementen ausgestattet hatten. Auf der ersten Seite findet sich dort ein Flashelement, die aus unerklärlichen Gründen im IE nicht mehr funktionierte. Dieses Flash wird mittels JavaScript eingebunden (mittels des coolen SWFObject).

Zu meiner noch viel größeren Überraschung kam aber noch hinzu, dass die Seite manchmal funktionierte. Nach ein paar Tests nämlich genau dann, wenn der Cache leer war. Dann kam keine Fehlermeldung und die Seite wurde korrekt und fehlerfrei angezeigt. Und auch wenn die Fehlermeldung kam, konnte man bei genauem Hinsehen vorher die teilweise gerenderte Seite kurz aufblitzen sehen. Mit völligem Unverständnis, wie es zu dieser Fehlermeldung kommen kann, habe ich mich auf die Suche nach einer Lösung gemacht.

Dabei war die Fehlermeldung so einfach wie unerklärlich: Es kommt einfach die Fehlermeldung “Internet Explorer cannot open the Internet site http://….. Operation aborted” oder im deutschem IE: “Die Internetseite http://… kann nicht geöffnet werden. Vorgang abgebrochen.“. Es bleibt dann aber nicht bei dieser Fehlermeldung und einem kleinen gelben Symbol am Fensterrand, sondern der IE bricht komplett die Anzeige ab mit der Fehlermeldung “Die Webseite kann nicht angezeigt werden”.

Eine Webrecherce hat mich irgendwann zu einem Hotfix geführt. Jemand mit dem selben Problem hatte eine Lösung darin gefunden, dem script-Tag das defer-Attribut zu setzen. Das defer-Attribut ist ein boolisches Attribut welches dem Browser mitteilt, dass das Script keinerlei Content (z.B. mittels document.write) erzeugt und deswegen der Browser mit dem HTML-Parsing und Rendering an dieser Stelle nicht unterbrechen muss.

 <script type="text/javascript" defer="defer">
....
</script>

Naja, offensichtlich sagte dieses Tag dem IE auch, dass er bitte meinen Flashfilm auch bei gefülltem Cache anzeigen soll und die Live-Seite war gerettet. Uff – Erleichterung!

Gestern habe ich nun Zeit gefunden, mir den Fehler genauer anzusehen. Dabei konnte ich mit folgendem, einfachen Code den Fehler reproduzieren.

<html>
    <head>
    	<title>TESTSEITE</title>
    </head>
    <body>
        <p>TESTSEITE</p>
        <div>
            <script type="text/javascript">
                var divTag = document.createElement('div');
                document.body.appendChild(divTag);
            </script>
        </div>
    </body>
</html>

Lässt man hingegen das <div>-Tag weg, funktioniert die Seite einwandfrei. Offensichtlich kann der IE nur dann Kindelemente an das Bodytag anhängen, wenn das Scripttag ebenfalls ein Kindelement des Body-Tags ist. Wenn dies nicht der Fall ist, stürzt die komplette JavaScript-Engine ab. Aber auch hier hilft es, das defer-Attribut wie oben beschrieben zu setzen. Es scheint also ein Problem zu sein, dass nur auftritt, wenn das Bodyelement noch nicht komplett geparsed ist.

Ich hoffe mal, dem ein oder anderem mit dem selben Problem kann ich nun eine stundenlange Suche ersparen.

Bisher 7 Kommentare » « Zurück zur Übersicht

  1. JS-Error in IE, Totalabbruch…

    JavaScript-Fehler (Fehlermeldung “Internet Explorer cannot open the Internet site http://….. Operation aborted” oder im deutschem IE: “Die Internetseite http://… kann nicht geöffnet werden. Vorgang abgebrochen.“) beheben, welcher im Intern…

  2. Alex sagt:

    Das Problem ist auch bei MS selbst dokumentiert:
    http://support.microsoft.com/kb/927917/en

  3. Konstantin sagt:

    Vielen, vielen Dank! ;)
    Das ist wohl der bisher bescheuertste Fehler des Internet-Explorers den ich je gesehen habe.
    Nun funktionierts ohne Probleme!
    Danke!

    MfG
    Konstantin

  4. maddesigns sagt:

    Danke, danke, danke! Das hat mir weitergeholfen, diesen blöden Fehler schnell zu beseitigen.

  5. Terraloader sagt:

    ja auch ein jahr später ist das problem bei mir in anderer weise noch da. also es handelte sich bei mir um eigenen code, aber jedenfalls konnt ich das problem lösen mit einem div mit id und settimeout mit innerhtml. dann gehts auch ohne script verschieben. :)

  6. Philip sagt:

    Hey, hatte den selben Fehler und bin hab, unter anderem mit Hilfe dieses Artikels, einige Ursachen und Lösungen gefunden: Hallo, hatte den selben Fehler und bin nach einiger Recherche auf mehrere Ursachen/Lösungen http://dev.philip-ehret.de/programme/die_internetsite_kann_nicht_geoeffnet_werden_vorgang_abgebrochen_im_internet_explorer.html gestoßen. Vielleicht hilfts noch jemandem (:

Kommentare als RSS abbonieren. · TrackBack URI

Schreib einen Kommentar

Comment spam protected by SpamBam