0

私は IE11 が送信方法を変更したことを知っており、この応答navigator.userAgentを見てきました。これは、必要なのが IE11 以上である場合にはうまく機能しますが、IE9 以上が必要です。Trident コードネームが IE9 で導入されたことをどこかで読んだことがありますが、IE8 を簡単にテストすると、そこのユーザー エージェントにも Trident が含まれていることがわかります。

私の正規表現はあまり良くありません。これらの文字列を分割して、次のセミコロンとの間に何があるかを判断してTrident/、どのバージョンを扱っているかを判断するにはどうすればよいですか? (代わりに機能検出を使用するように言わないでください。ここではオプションではありません。)

IE8:

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BO1IE8_v1;ENUS)"

IE9:

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)" 

私の既存のコード(IE8をキャッチしない)は次のようになります:

if (navigator.userAgent.match(/Trident/)) {
   // it's supported; do stuff
}

基本的に、IE9 から 5.0 を取得し、IE8 から 4.0 を取得しようとしています。

4

1 に答える 1

1

私の正規表現はあまり良くありません。これらの文字列を分割して、Trident/ とそれに続くセミコロンの間にあるものを判別し、どのバージョンを扱っているかを判別するにはどうすればよいですか?

キャプチャ グループを使用して、配列の 2 番目の要素を取得すると、キャプチャされた部分が得られます。

var stringAfterTrident = navigator.userAgent.match(/Trident([^;]+);/)[1];
//should return ["Trident/5.0;", "/5.0"] and you want the second item of the array

/Trident([^;]+);/基本的には、トライデントで始まり、セミコロンがあるまでセミコロンではない 1 つ以上の文字をキャプチャします。

于 2013-09-25T18:22:58.687 に答える