2011-06-29 10 views
1

userAgentのプロパティを使用したブラウザの検出は、ブラウザがあなたに嘘をつき、同じブラウザのさまざまなバージョンがuserAgentと同じ値を持つ異なる機能セットを持つ可能性があるため、フィーチャの検出は、実際にブラウザで可能な操作が実際に可能かどうかを実際に把握するための方法です。オブジェクト/機能の検出によるブラウザの検出

ブラウザが実際に何をしているのかを知るために機能検出を使用できるかどうかが分かります。つまり、ユーザーエージェントが持つ特定のクォークを特定して、どのブラウザーがまったく同じクォークを持っているかを判断することです。たとえば、ブラウザでXMLHttpRequestが定義されていないのに、ActiveXObjectと定義されている場合、MSIE 6以下になることがわかります。

私は自分自身を書くことができるように、そのような識別の癖やそれらのリストのライブラリがありますか?

編集: 私は本当にこれの背後に論理的根拠を提供しませんでした。 Webアプリケーションの使用統計情報を収集するシステムをアップグレードしたいと思います。それは私はブラウザを把握する必要があり、現在userAgentを使用します。私はもっ​​と頑丈なものを探しています。

+2

"機能の検出は、実際にブラウザで実行したいことが実際に可能かどうかを実際に把握するための方法です。 - 次に、特定の機能をチェックしてみませんか?私はあなたが機能を探しているなら、正確なブラウザをチェックする際に、この点を見ない。 – pimvdb

+2

機能検出のポイントは、ブラウザに実際に必要な機能があるかどうかを確認できるようにすることです。あなたがそうするとき、あなたは実際にあなたがあなたの仕事をするために必要な機能を持っているかどうか気にするだけで、それがどのブラウザであるか気にしません。だから、それがあなたがやっていることなら、なぜそれが実際にどのブラウザに気を配っているのですか?あなたが本当に達成しようとしていることが、あなたが必要とする適切な機能を持っているかどうかを見極めること以外に何かであるなら、あなたが本当に達成しようとしていることを教えてください。 – jfriend00

+0

私は、ブラウザー自体に関する情報を使用統計として収集する必要があります。また、私が本当に知りたいことの一つに思えました。 –

答えて

2

あなたが本当に探していること(統計収集のための実際のブラウザタイプの記録、ウェブページプログラミングではない)を明確にしたので、すべてのブラウザの既定のすぐに使用できる動作には、非欺瞞的かつ一意に識別するユーザエージェント。したがって、一桁の大きさでは、それらのすべてを正しく解釈する方法を理解する必要があります。それは、おそらく遭遇するものの99%になるからです。 Googleでは、これらのユーザーエージェントのさまざまなリストを表示しています。私はthis oneの「ブラウザ」列が好きです。多くのブラウザー(Gecko、Webkit、MSIE、Presto)でレンダリングエンジンとバージョンを簡単に特定し、そこから気になるディテール(FirefoxやCaminoなど)をより簡単に判断できます。すべてのブラウザが一意に識別されます。あなたは時間のある程度の詳細なサブブラウザ識別をプログラムすることができます。

次に、偽のユーザーエージェントであなたに嘘をついているブラウザを特定することが本当に価値があるのであれば、私は驚くでしょう。 50種類の異なるバージョンのブラウザを30種類用意している場合は、ユーザーエージェントに依存することなく、機能の検出によってそれぞれのバージョンを一意に識別しようとする膨大な作業です。定期的に更新している膨大なテストのデータベースを構築する必要があります。そして、あなたがどのようにそれらをコード化し、そして/またはそれらのためにテストするかを理解するためにそれらのマイナーな改訂版のすべてをお約束するだろうか、私は考えていません。

レンダリングエンジンに嘘をついているブラウザを特定したい場合(Geckoが実際にはMSIEであると主張している)、それはおそらくより少数の機能テストあなたがIE6のために特定したものとして)。しかし、それは依然として背の高い命令です。私がこれをしていたら、IEが各メジャーバージョンでサポートしているプロプライエタリなものから始め、それらをテストします。一般的にIE以外のほとんどのものをサポートする人はいないと言っても大丈夫です。そして、私はおそらく、Geckoレンダリングエンジンのいくつかのモジラ固有のものを探すでしょう。今のところ、すべてのエンジンには独自のCSS3固有のタグ-moz、-o、-ms、-webkitがあります。これは、レンダリングエンジンをかなり爪にしています(それ以降のバージョン用)。これらの標準は最終的には消えてしまいますが、ほとんどのブラウザは長い間、その亜種との下位互換性を保持しています(マイクロソフト、おそらく永遠に)。

他のアイデアのために、Modernizer、YUI、jQueryなどの重い機能の検出を使用するいくつかのクロスブラウザライブラリを調べることができます。

1

Modernizrは、そのための良いライブラリであり、YepNopeと組み合わせると、すべての(よく)ほとんどのブラウザでうまく動作するウェブサイトを作るために必要なすべてを手に入れることができます。

+0

モダナイザーは機能の検出に最適です。問題は、機能の検出ではなく、ブラウザIDを(識別されていない理由で)識別する方法にあるようです。 – jfriend00

+0

Modernizrは、ブラウザに依存しない機能を検出するために特に使用されます。私はそれを使って癖を確認することを完全に計画していますが、それらの癖を特定のブラウザにマッピングすることは本当に役に立ちません。 –

1

コースの馬の問題です。 UA文字列によるブラウザの盗聴は、任意の文字列からブラウザを識別することに基づいてブラウザの機能についての仮定を行ったため、欠陥があると考えられました。 UAの文字列が信頼できないことが知られているだけでなく、文字列の解析が既知のブラウザに限定されていたため、これにも欠陥がありました。新しいブラウザ、または既知のブラウザの新しいバージョンを導入するには、プログラムの一部を盗聴するブラウザを更新する必要がありました。

一方、機能からブラウザを特定しようとすると、信頼性がさらに低下します。個々のブラウザごとに、ブラウザクォークの一連のテストを定義しようとします。あなたは、他のすべてのブラウザを除いて、どのブラウザがどの機能を備えているのかを解明しようとする終わりのない仕事をしています。

統計情報を収集するサイトは、user-agent headerを使用してサーバーで行います。もちろん、それは信頼できませんが、結果は少なくとも合理的なエラーの中で分析することができます。新しいブラウザや未知のブラウザをはるかに簡単に特定でき、クライアント側のスクリプトに頼ることはありません。

分析に使用できるUA文字列の巨大なデータベースがあります。 http://www.user-agents.org/。特定のエラー率があり、統計にあまり依存しないことに注意してください(user-agent.orgには、mozillaが含まれている24個のUA文字列がリストされています。そのほとんどはブラウザーではなく、174個のMSIEそれら)。

関連する問題