DOM Level 3 XPath в Internet Explorer

Я только что установил IE10 на свою Windows 7 и заметил, что, даже если я рад, что XML из запросов AJAX теперь совместимы с документами DOM, довольно простая функция, такая как document.evaluate все еще не поддерживается.

Что еще хуже, так как эти XML не являются пользовательскими Microsoft IXMLDocument объекты, узлы не поддерживают selectNodes а также selectSingleNode больше. В конце концов, кажется, что IE10 не поддерживает DOM Level 3 XPath или MSXML Xpath.

Серьезно, Microsoft? Я что-то упускаю?

Конечно, я могу использовать querySelector а также querySelectorAll, но я не хочу терять немало обратной совместимости.

В противном случае можно запросить документ MSXML, используя эту строку

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

как указано здесь, но я думаю, что было бы неплохо иметь дело, наконец, со стандартным документом DOM в IE.

Итак, есть ли способ использовать XPath в IE10 со стандартными документами DOM?

ОБНОВЛЕНИЕ 26/7/2013 IE11 еще не стабилен, но все еще не поддерживает document.evaluate, Если он не будет поддерживать его в стабильном выпуске, я сомневаюсь, что он когда-нибудь его поддержит. Излишне говорить, что это смешно.

Я понимаю, что вы можете использовать querySelector/All в узлах DOM, но это не поддерживается в IE9 и ниже, которые все еще довольно широко используются, и в любом случае XPath является более мощным, чем селекторы.

К счастью (если вы можете сказать это), вы все еще можете установить xhr.responseType = "msxml-document", На мгновение я боялся, что ты больше не сможешь этого делать...

ОБНОВЛЕНИЕ 23/11/2013 IE11 стабилен, но, к сожалению, он не поддерживает document.evaluate, Поскольку тяжелые XML-документы все меньше используются в веб-приложениях в пользу JSON или других легких форматов обозначений, это становится меньшей проблемой, но все же.

Настройка responseType Свойство по-прежнему предоставляет устаревшие XML-документы, поэтому, я думаю, ничего не потеряно. Я не знаю, останется ли это верным для IE12, хотя.

ОБНОВЛЕНИЕ 15/8/2015 Звучит смешно прямо сейчас, но Edge теперь поддерживает document.evaluate, Просто когда (почти) все переключилось на JSON для обмена данными. Ну, лучше поздно, чем никогда, я думаю.

2 ответа

Решение

Да, в IE все еще нет поддержки XPath =/.

Для меня самый надежный способ использования document.evaluate в любом браузере, к сожалению, через библиотеку.

Он называется Wicked Good XPath, и это недавняя переписанная старой Google старая библиотека JavaScript-XPath. Я пользуюсь Wicked Good XPath с момента выпуска, и мне было очень удобно с ним (ну, не так сильно, как с поддержкой XPath, но все же).

Это часть Microsoft Edge build 10240+: modern.ie:DOM Уровень 3 XPath

IE Dev Channel имеет сборку, которую вы можете использовать для предварительного просмотра:

Он использует /questions/tagged/wicked-good-xpath внутреннего использования:

Чтобы поддерживать WGX без загрязнения контекста веб-страницы, мы создали отдельный изолированный скрипт-движок, предназначенный для WGX. С некоторыми изменениями в WGX, которые предоставляют точки входа для вызова функций и доступа к результатам, мы собираем данные со страницы в изолированный механизм и оцениваем выражения с помощью WGX. С WGX, включенным для обработки собственных запросов XPath, мы видим немедленную выгоду от сайтов, пропускающих контент, в нашем новом движке, отображающем современный веб

На данный момент MSDN имеет руководство по миграции, которое рекомендует следующее:

В общем, попробуйте перейти на собственные объекты и API, если вам не нужны такие функции, как XPath/XSLT; это можно сделать, передавая responseText в DOMParser вместо использования responseXML var:

Если API MSXML по-прежнему требуются, можно обновить функции проверки, чтобы проверить тип полученного узла, чтобы выбрать правильный API:

Рекомендации

Другие вопросы по тегам