Tipi di oggetti XML nativi e siti Web legacy

Windows Internet Explorer 9 introduce il concetto di oggetti XML nativi. Gli oggetti XML nativi possono essere renderizzati in una pagina e utilizzati con le stesse  API DOM (Document Object Model) supportate per gli oggetti HTML. Le versioni precedenti di Windows Internet Explorer hanno sempre gestito il codice XML mediante oggetti Microsoft XML (MSXML), che esistono ancora in Internet Explorer 9. Tuttavia, gli oggetti XML nativi non sono compatibili con gli oggetti MSXML. Questo significa che gli oggetti MSXML non possono essere utilizzati con le API DOM native e gli oggetti XML nativi non possono essere utilizzati con le API DOM MSXML  .

Quando il codice di un sito tenta di combinare i due, si ottiene un'eccezione JavaScript che può causare problemi di compatibilità.

Lo scenario più probabile in cui ciò accade è il passaggio di un nodo ottenuto da responseXML (che restituisce un oggetto MSXML) in una API DOM nativa.


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


La maggior parte dei siti include già codice di fallback per gestire correttamente gli oggetti MSXML, ma il problema si presenta quando determinate operazioni di rilevamento delle funzionalità inducono il sito a tentare di utilizzare l'API DOM nativa. I rilevamenti più comuni che causano il problema sono:


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


  • Aggiorna il codice del sito in modo da utilizzare esclusivamente API e oggetti nativi oppure API e oggetti MSXML
  • In generale, cerca di eseguire la migrazione ad API e oggetti nativi, a meno che non siano necessarie funzionalità quali XPath/XSLT. A tale scopo è possibile passare responseText a DOMParser, anziché utilizzare responseXML var:
    
    parser = new DOMParser();
    parser.parseFromString(xhr.responseText, "text/xml");
    
    
  • Se sono ancora necessarie le API MSXML , è possibile aggiornare il controllo delle funzionalità in modo da verificare il tipo di nodo ricevuto e selezionare l'API corretta:
    
    if(!window.Node || !(node instanceof Node)) {
      // This is an MSXML node
    }
    
    

Argomenti correlati

 

 

Mostra:
© 2014 Microsoft