Types d’objets XML natifs et sites Web d’ancienne génération

Windows Internet Explorer 9 introduit le concept d’objets XML natifs. Ces objets peuvent être affichés dans une page et utilisés avec les mêmes API du modèle DOM (Document Object Model) que celles prises en charge pour les objets HTML. Les versions antérieures de Windows Internet Explorer géraient systématiquement le code XML via des objets Microsoft XML (MSXML), qui existent toujours dans Internet Explorer 9. Toutefois, les objets XML natifs ne sont pas compatibles avec les objets MSXML. Cela signifie que les objets MSXML ne peuvent pas être utilisés avec les API de modèle DOM natives et que les objets XML natifs ne peuvent pas être utilisés avec les API de modèle DOM MSXML.

Quand le code d’un site essaie de combiner les deux, cela entraîne généralement le déclenchement d’une exception JavaScript, source de problèmes de compatibilité éventuels.

Cela peut notamment se produire lors de la transmission d’un nœud obtenu auprès de responseXML (qui retourne un objet MSXML) à une API DOM native.


var doc = xhr.responseXML;
if(document.adoptNode) document.adoptNode(doc.documentElement);


La plupart des sites contiennent déjà du code de secours pour gérer correctement les objets MSXML, mais le problème se produit quand certaines détections de fonctionnalités font en sorte que les sites essaient d’utiliser des API de modèle DOM natives. Les détections les plus courantes entraînant des problèmes sont les suivantes :


if(window.XMLSerializer)
if(document.adoptNode)
if(document.implementation.createDocument)


  • Mettre à jour le code du site pour qu’il fonctionne entièrement avec des API et des objets natifs ou des API  et des objets MSXML
  • En général, essayez d’effectuer une migration vers des API et des objets natifs, à moins que vous n’ayez besoin de fonctionnalités comme XPath/XSLT. Vous pouvez pour cela passer responseText à DOMParser, au lieu d’utiliser responseXML var:
    
    parser = new DOMParser();
    parser.parseFromString(xhr.responseText, "text/xml");
    
    
  • Si des API MSXML sont encore nécessaires, les vérifications de fonctionnalités peuvent être mises à jour pour vérifier le type de nœud reçu afin de sélectionner l’API correcte :
    
    if(!window.Node || !(node instanceof Node)) {
      // This is an MSXML node
    }
    
    

Rubriques connexes

 

 

Afficher:
© 2014 Microsoft