Dela via


XMLHttpRequest responseXML no IE10 Release Preview

O IE10 no Windows 8 Release Preview atualiza o responseXML de um XMLHttpRequest para retornar um documento XML nativo por padrão. Esta alteração se aplica aos modos de documentos Padrões e Quirks do IE10, fazendo com que eles sejam interoperáveis com outros navegadores modernos e consistentes com um método de “mesma marcação”. Os modos de compatibilidade de documentos 5, 7, 8, e 9 permanecem inalterados.

Esta alteração pode impactar sites que esperavam que responseXML contivesse um documento MSXML e que dependesse de funcionalidades específicas MSXML, tal como selectNodes. Nesse caso, você pode solicitar que o IE10 retorne um MSXML definindo o membro responseType do seu objeto XMLHttpRequest para 'msxml-document'. Se o seu código não depender de uma funcionalidade específica MSXML, o documento XML nativo do IE10 deve funcionar para você.

O suporte XML nativo do IE9 trouxe paridade ao DOM para XML e HTML, e possibilitou que fragmentos XML fossem inseridos e renderizados diretamente dentro de uma página (até mesmo em HTML). O IE9 também simplificou a conversão entre XML e DOM com o acréscimo de DOMParser e XMLSerializer. O IE10 finaliza esta transição atualizando o responseXML para retornar um documento XML nativo.

Assim como o IE9, os previews do IE10 antes do Windows 8 Release Preview retornaram um documento MSXML para responseXML. Portanto, a recuperação de um documento nativo exigiu uma etapa adicional de passagem de responseText para DOMParser.

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

No Windows 8 Release Preview, o IE10 exclui a necessidade de uma etapa DOMParser adicional ao retornar um documento nativo diretamente via responseXML. Os códigos já existentes usando DOMParser continuarão funcionando no IE10.

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

Esta simplificação também servirá para a nova propriedade response quando responseType for definido como 'document'.

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

O IE10 também inclui um mecanismo que permite a você optar por recuperar um documento MSXML. Isso pode ser útil se você ainda precisar de uma funcionalidade específica MSXML (como selectNodes) ou de mais tempo para migrar. Para tanto, defina o responseType do seu objeto XMLHttpRequest para 'msxml-document'.

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

Na teoria, o procedimento deveria ser ignorado por outros navegadores, mas na prática alguns deles emitem uma exceção. Você pode contestar isso usando uma declaração try/catch como no exemplo acima.

—Tony Ross‎, gerente de programas, Internet Explorer