Подтвердить что ты не робот

DOM Уровень 3 XPath в Internet Explorer

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

Чем хуже то, что эти XML файлы не являются обычными объектами Microsoft IXMLDocument, узлы больше не поддерживают selectNodes и selectSingleNode. В конце концов, похоже, что IE10 не поддерживает DOM Level 3 XPath или MSpath 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.

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

4b9b3361

Ответ 1

Да, в IE =/.

нет поддержки XPath.

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

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

Ответ 2

Это часть Microsoft Edge build 10240+: modern.ie:DOM Level 3 XPath

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

Он использует внутренне:

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

В настоящее время в MSDN есть руководство по миграции, которое рекомендует следующее:

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

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

Ссылки