Warum funktioniert mein Javascript nicht mit IE9?

Natürlich kann es auf diese Frage sehr viele Antworten und für die Ursachen sehr viele Gründe geben, allerdings sehen wir öfter immer die gleiche Ursache und darauf möchte ich kurz eingehen:

In der Vergangenheit war es mit <=IE8 möglich über die API createElement kompletten HTML einzufügen, Bsp:

document.createElement(“<a href=’https://blogs.technet.com/iede’>IEDE Blog</a>”);

Laut W3C Definition ist dies nicht standardkonform:

Creates an element of the type specified. Note that the instance returned implements the Element interface, so attributes can be specified directly on the returned object.
In addition, if there are known attributes with default values, Attr nodes representing them are automatically created and attached to the element.
To create an element with a qualified name and namespace URI, use the createElementNS method.

Daher wird bei einem solchen Aufruf durch IE9 korrekterweise die Exception:

INVALID_CHARACTER_ERR

geworfen.

 

Um herauszufinden, woran meine Seite/Script scheitert bieten die IE8/9 Developer Tools (aka “F12 tools”) eine einfache Möglichkeit:

image

Die Seite öffnen und dabei die Tools offen haben. In der “Console” werden die Javascript Fehler ausgegeben. Um tiefer in ein Problem einzusteigen, kann dann das Debugging gestartet werden und dadurch der Fehler noch näher untersucht werden.

Um das selbe zu erreichen, muss folgender Code verwendet werden:

var aObj = document.createElement("a"); aObj.href = "https://blogs.technet.com/iede"; aObj.appendChild(document.createTextNode("IEDE Blog")); document.body.appendChild(aObj);

image

Als kurzfristigen Workaround kann hier entweder der Kompatibilitätsmodus (das zerrissene Blatt in der Adresszeile) genutzt werden, oder durch den Webseitenbetreiber kann die Seite durch X-UA-Compatible auf IE8 gesetzt werden.

Allerdings sollte das mittel/langfristige Ziel sein, den Code zu korrigieren!

 

-Stephanus