XMLHttpRequest responseXML in der IE10 Release Preview

IE10 in Windows 8 Release Preview aktualisiert die responseXML aus einer XMLHttpRequest so, dass standardmäßig ein systemeigenes XML-Dokument zurückgegeben wird. Diese Änderung gilt für die Standards- und Quirks-Dokumentmodi von IE10 und sorgt für Interoperabilität mit anderen modernen Browsern sowie für einen einheitlichen Ansatz beim Markup. Die Kompatibilitätsdokumentmodi 5, 7, 8 und 9 bleiben unverändert.

Diese Änderung hat möglicherweise Auswirkungen auf Sites, die ein MSXML-Dokument in responseXML erwarten und von MSXML-spezifischen Funktionen abhängen, beispielsweise von selectNodes. In diesem Fall können Sie anfordern, dass von IE10 MSXML zurückgegeben wird, indem Sie den responseType-Member Ihres XMLHttpRequest-Objekts auf 'msxml-document' festlegen. Wenn Ihr Code nicht von MSXML-spezifischen Funktionen abhängt, sollte das systemeigene XML-Dokument von IE10 für Sie ausreichen.

Mit der Unterstützung systemeigener XML wurde in IE9 die DOM-Parität für XML und HTML eingeführt und ermöglicht, dass XML-Fragmente direkt in eine Seite (selbst in HTML) eingefügt und dort gerendert werden können. IE9 vereinfacht außerdem das Konvertieren zwischen XML und DOM durch DOMParser und XMLSerializer. IE10 schließt diesen Übergang ab, indem responseXML so aktualisiert wird, dass ein systemeigenes XML-Dokument zurückgegeben wird.

Wie bei IE9, wurde auch auch von den Vorabversionen von IE10 vor der Windows 8 Release Preview ein MSXML-Dokument für responseXML zurückgegeben. Aus diesem Grund war für das Abrufen eines systemeigenen Dokuments ein zusätzlicher Schritt erforderlich, in dem responseText an DOMParser übergeben wird.

var xhr = new XMLHttpRequest();

//...

var parser = new DOMParser();

var doc = parser.parseFromString(xhr.responseText, 'text/xml');

// 'doc' contains a native document in both IE9 and IE10

In IE10 in der Windows 8 Release Preview ist dieser zusätzliche DOMParser-Schritt nicht mehr erforderlich, da ein systemeigenes Dokument direkt über responseXML zurückgegeben wird. Vorhandener Code, der DOMParser verwendet, funktioniert in IE10 jedoch auch weiterhin.

var xhr = new XMLHttpRequest();

//...

var doc = xhr.responseXML;

// 'doc' contains a native document in IE10’s Standards and Quirks document modes

// it contains an MSHTML document in IE9 and in IE10’s compatibility document modes

Diese Vereinfachung gilt ebenso für die neue response-Eigenschaft, wenn responseType auf 'document' festgelegt ist.

var xhr = new XMLHttpRequest();

xhr.open(method, url, true);

xhr.responseType = 'document';

//...

var doc = xhr.response;

// 'doc' contains a native document in IE10’s Standards and Quirks document modes

Zusätzlich enthält IE10 einen Mechanismus, um das Abrufen von MSXML-Dokumenten zu abonnieren. Dies kann insbesondere dann hilfreich sein, wenn auch weiterhin einige MSXML-spezifische Funktionen (z. B. selectNodes) erforderlich sind oder Sie für die Migration zusätzliche Zeit benötigen. Legen Sie hierfür den responseType Ihres XMLHttpRequest-Objekts auf 'msxml-document' fest.

var xhr = new XMLHttpRequest();

xhr.open(method, url, true);

try { xhr.responseType = 'msxml-document'; } catch(e){}

//...

var doc = xhr.responseXML;

// 'doc' now contains an MSXML document in IE10’s Standards and Quirks document modes

Theoretisch sollte diese Zuweisung von anderen Browsern ignoriert werden, in der Praxis kann es jedoch vorkommen, dass eine Ausnahme ausgelöst wird. Dies können Sie am besten vermeiden, indem Sie eine try/catch-Anweisung wie im vorherigen Beispiel verwenden.

– Tony Ross, Program Manager, Internet Explorer