web-dev-qa-db-ja.com

Internet ExplorerのDOMレベル3 XPath

Windows 7にIE10をインストールしたところ、AJAX要求からのXMLが互換性のあるDOMドキュメントになり、document.evaluatestillはサポートされていません。

さらに悪いことに、これらのXMLはカスタムMicrosoft IXMLDocumentオブジェクトではないではないため、ノードはselectNodesおよびselectSingleNodeもう。 結局のところ、IE10はDOM Level 3 XPathまたはMSXML Xpathをサポートしていないようです

真剣に、マイクロソフト?行方不明のものはありますか?

確かに、querySelectorquerySelectorAllを使用できますが、下位互換性をかなり失わないようにしたいと思います。

それ以外の場合、この行を使用してMSXMLドキュメントを要求できます

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

前述のように here ですが、IE。

では、IE10でXPathを標準のDOMドキュメントで使用する方法はありますか?

UPDATE 26/7/2013IE11はまだ安定していませんが、まだはサポートしていませんdocument.evaluate。安定版リリースでサポートしない場合、everでサポートすることはないと思います。言うまでもなくこれは馬鹿げた話です。

DOMノードでquerySelector/Allを使用できることはわかっていますが、IE9以下ではまだサポートされていません。これはまだかなり一般的に使用されており、XPathはセレクターよりも強力です。

幸い(言うことができる場合)、引き続きxhr.responseType = "msxml-document"を設定できます。一瞬、あなたがもうそれができないと恐れていました...

UPDATE 23/11/2013IE11は現在安定していますが、残念ながらdocument.evaluateはサポートされていません。重いXMLドキュメントがWebアプリケーションで使用されることが少なくなり、JSONまたは他の軽い表記形式が優先されるため、これはそれほど問題になりませんが、それでも問題はありません。

responseTypeプロパティを設定しても、従来のXMLドキュメントが提供されるため、失われるものはないと思います。それがIE12に当てはまるかどうかはわかりませんが。

UPDATE 15/8/2015今はばかげているように聞こえますが、Edgeはdocument.evaluateをサポートするようになりました。データ交換のために(ほとんど)すべてがJSONに切り替わったとき。まあ、遅くならない方がましだと思います。

32
MaxArt

はい、まだXPathはサポートされていませんIE = /。

私にとって、すべてのブラウザでdocument.evaluateを使用する最も信頼できる方法は、残念ながらライブラリを使用することです。

これは Wicked Good XPath と呼ばれ、最近のGoogleによる古いグッズの書き換えです JavaScript-XPath ライブラリ。私はリリース以来、Wicked Good XPathを使用しており、本当に快適です(ネイティブXPathサポートほどではありませんが)。

13
Petr Janeček

Microsoft Edgeビルド10240+の一部です: modern.ie:DOM Level 3 XPath

IE Dev Channel には、プレビューに使用できるビルドがあります。

内部的に wicked-good-xpath を使用しています:

Webページのコンテキストを汚染せずにWGXをサポートするために、WGX専用の独立した独立したスクリプトエンジンを作成しました。関数を呼び出して結果にアクセスするためのエントリポイントを提供するWGXにいくつかの変更を加えて、ページから分離されたエンジンにデータをマーシャリングし、WGXで式を評価します。 WGXがネイティブXPathクエリを処理できるようにすると、最新のWebをレンダリングする新しいエンジンにコンテンツがないサイトからすぐに利益が得られます

今のところ、MSDNには、次を推奨する移行ガイドがあります。

一般に、XPath/XSLTなどの機能が必要でない限り、ネイティブオブジェクトとAPIへの移行を試みます。これは、responseXML varを使用する代わりに、responseTextをDOMParserに渡すことで実行できます。

MSXML APIが引き続き必要な場合は、機能チェックを更新して、受信したノードのタイプを確認し、正しいAPIを選択できます。

参照

5
Paul Sweatte