web-dev-qa-db-fra.com

DOM niveau 3 XPath dans Internet Explorer

Je viens d'installer IE10 sur mon Windows 7, et j'ai remarqué que, même si je suis content que les XML de AJAX soient maintenant des documents DOM compatibles, une fonction plutôt basique comme document.evaluate est encore non pris en charge.

Le pire est que, puisque ces XML sont pas les objets Microsoft IXMLDocument personnalisés, les nœuds ne prennent plus en charge selectNodes et selectSingleNode . Au final, il semble qu'IE10 ne prend pas en charge DOM niveau 3 XPath ou MSXML Xpath.

Sérieusement, Microsoft? Y a-t-il quelque chose qui me manque?

Bien sûr, je peux utiliser querySelector et querySelectorAll, mais je ne veux pas perdre un peu de compatibilité descendante.

Sinon , on peut toujours demander un document MSXML en utilisant cette ligne

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

comme indiqué ici , mais je pense que ce serait bien de traiter, enfin, un document DOM standard dans IE aussi.

Alors, existe-t-il un moyen d'utiliser XPath dans IE10 avec des documents DOM standard?

MISE À JOUR 26/7/2013 IE11 n'est pas encore stable, mais il toujours ne prend pas en charge document.evaluate. S'il ne le prend pas en charge dans la version stable, je doute qu'il le prenne jamais le supporte. Inutile de dire que c'est ridicule.

Je comprends que vous pouvez utiliser querySelector/All dans les nœuds DOM, mais ce n'est pas pris en charge dans IE9 et inférieur, qui sont encore assez couramment utilisés, et de toute façon XPath est plus puissant que les sélecteurs.

Heureusement (si vous pouvez le dire), vous pouvez toujours définir xhr.responseType = "msxml-document". Pendant un instant, j'ai craint que vous ne puissiez plus faire ça ...

MISE À JOUR 23/11/2013 IE11 est stable maintenant mais, malheureusement, il ne prend pas en charge document.evaluate. Comme les documents XML lourds sont de moins en moins utilisés dans les applications Web au profit de JSON ou d'autres formats de notation légers, cela devient moins un problème, mais quand même.

La définition de la propriété responseType fournit toujours des documents XML hérités, donc rien n'est perdu, je suppose. Je ne sais pas si cela restera vrai pour IE12, cependant.

MISE À JOUR 15/8/2015 Cela semble ridicule en ce moment, mais Edge prend désormais en charge document.evaluate. Juste au moment où (presque) tout est passé à JSON pour l'échange de données. Eh bien, mieux vaut tard que jamais, je suppose.

32
MaxArt

Oui, il n'y a toujours pas de support XPath dans IE = /.

Pour moi, la façon la plus fiable d'utiliser document.evaluate dans tous les navigateurs, malheureusement, via une bibliothèque.

Il s'appelle Wicked Good XPath et c'est une réécriture récente de Google de l'ancien bien JavaScript-XPath bibliothèque. J'utilise Wicked Good XPath depuis la sortie et je suis vraiment à l'aise avec ça (enfin, pas autant qu'avec un support XPath natif, mais quand même).

13
Petr Janeček

Cela fait partie de Microsoft Edge build 10240+: modern.ie:DOM Level 3 XPath

IE Dev Channel a une version que vous pouvez utiliser pour la prévisualiser:

Il utilise wicked-good-xpath en interne:

Afin de prendre en charge WGX sans polluer le contexte d'une page Web, nous avons créé un moteur de script séparé et isolé dédié à WGX. Avec quelques modifications apportées à WGX qui fournissent des points d'entrée pour appeler des fonctions et accéder aux résultats, nous rassemblons les données de la page vers le moteur isolé et évaluons les expressions avec WGX. Avec WGX activé pour gérer les requêtes XPath natives, nous constatons des gains immédiats des sites manquant de contenu dans notre nouveau moteur rendant le Web moderne

Pour l'instant, MSDN a un guide de migration qui recommande ce qui suit:

En général, essayez de migrer vers des objets natifs et des API, sauf si vous avez besoin de fonctionnalités comme XPath/XSLT; cela peut être fait en passant responseText à DOMParser, au lieu d'utiliser responseXML var:

Si les API MSXML sont toujours nécessaires, les vérifications des fonctionnalités peuvent être mises à jour pour vérifier le type de nœud reçu afin de sélectionner la bonne API:

Références

5
Paul Sweatte