Start » Blog » Softwareentwicklung
20.12.2008
"Unbekannter Laufzeitfehler" bei JavaScript - nur im Internet-Explorer
Na toll - ein JavaScript, das auf anderen Seiten bereits eingebunden ist und dort einwandfrei funktioniert, versagt auf einer neuen Site plötzlich - und dann ausgerechnet und ausschließlich im Internet-Explorer. Während man in Firefox und anderen Browsern mit dem Script keine Probleme hat, will der IE einfach nicht tun, was man von ihm verlangt und zeigt nach einem Klick auf das dezente "Fehler auf der Seite" in der Statusleiste und "Details anzeigen >>" die hilfreiche Meldung "Unbekannter Laufzeitfehler". Mit einigen genervten alert()-Versuchen und / oder einem ordentlichen Debugger, der auch im IE den Comfort eines Dragonfly oder der zahlreichen Debugger für Firefox bietet, findet man endlich die korrekte Zeile, die "irgendwo in der Nähe" der angegebenen Zeilennummer der IE-Fehlermeldung liegt und wo irgendwo eine Anweisung nach dem Muster
irgendwas.innerHTML = "sonstwas";
zu finden ist. Damit also gleich zur Suchmaschine und nach "innerHTML unbekannter Laufzeitfehler IE" oder ähnlichen Kombinationen gesucht, findet man schnell die Erklärung, dass sich der IE hier ausnahmsweise nicht falsch, sondern überkorrekt verhält und die Zuweisung von syntaktisch unvollständigen Codeblöcken mitunter auf diese sehr uninformative Weise zurückweist. Ist also z. B. ein Tag im zugewiesenen neuen Inhalt des Containers nicht korrekt geschlossen, weigert sich der IE, die Anweisung auszuführen. In seltenen Fällen mag dieser Hinweis aber nicht zum Ziel führen... doer zumindest nur auf Umwegen. Im Fall, der mich zu diesem Beitrag "inspiriert" hat, lag das Problem nämlich nicht am dynamisch zugewiesenen Inhalt, sondern an einem Fehler in der bestehenden Struktur der Seite, ganz in der Nähe des Containers, dem durch das JavaScript neues innerHTML zugewiesen werden sollte. Konkret war es ein nicht geschlossenes Endtag für den Link, der das Script auslösen sollte. Ein Beispiel, das den Fehler im vorliegenden Fall veranschaulicht, funktioniert allerdings komischerweise im IE auch mit dem Fehler - es mag zu vereinfacht sein, als dass es zum Auslösen der Laufzeitstörung ausreicht. Dennoch genügt das Beispiel zur Illustration der Fehlerursache, die zwar mit nicht valider Struktur zu tun hat... aber eben nicht im zugewiesenen Inhalt, sondern im bereits vor der Manipulation /bzw. dem Versuch) vorhandenen DOM.
<p><a href="#" onclick="document.getElementById('testjs').innerHTML='<strong>Hallo</strong> IE!'; return false;">Sag "Hallo"</a</p>
<p id="testjs"></p>
...
Das fehlende ">" beim schließenden </a> am Ende der ersten Zeile war - im übertragenen Fall, der aus einer komplexeren Seitenstruktur und einem Funktionsaufruf statt direktem Script im onclick bestand -die Fehlerquelle für den Unbekannten Laufzeitfehler im IE, während Firefox, Safari, Chrome und andere kein Problem damit hatten. Vielleicht hilft dieser Beitrag ja einmal jemandem, die von mir verplemperte Zeit zu vermeiden - schön wär´s jedenfalls.