悪名高いuseragent文字列をブラウザの解析に使用してはならない理由と、ブラウザをアップグレードする必要があることを示すメッセージをユーザーに提供しないと、サイトが機能しなくなるという理由で、大量のインクがすでに流出しています。主な引数は次のとおりです。
良い。今、私はuseragent文字列の使用がより正当であると思うかもしれない状況にあり、私はいくつかの入力が欲しいです。私たちはソフトウェア製品を提供する小さな会社です。その製品は、特定のことを行うためにWebアプリケーションを必要とします。現在、主要なブラウザの最新バージョンのみをサポートしています。つまり、IE9またはoperaは完全にはサポートされていません。当社の製品のユーザーがWebアプリケーションにログインすると、警告(ポップアップではなくメッセージ)が表示されます。ブラウザがすべての機能をサポートしていない可能性があります。この警告が上記の問題の影響を受けず、実際にログインする直前に「Nice to have」警告であると私が考える理由は次のとおりです。
私の推論に重大な欠陥はありますか?あるいは、useragent文字列を使用するとメッセージが不適切に表示される(または表示されない)理由は何ですか?私たちが誰かのブラウザを拒否した場合に「専門的でない」または「侮辱的」であると見なされた場合、これは当社の製品の信頼性を損ないますか?
あなたが企業の設定にいる場合は、ユーザーを制御できます。イメージ、グループポリシー、ファイアウォール設定などを通じて、ユーザーが使用を許可されているブラウザーにロックする方法はさまざまです。ここで、あなたが言うには、社内で実行する権限を持つユーザーを意味しますそう。
ただし、これらすべてのフープを飛び越えて、どのブラウザにあるかを検出し、それに応じて続行したい場合は、しばらくの間機能検出、ユーザーエージェントではありません。
私のお気に入りのリソースは ModernizrPaul Irish とチームです。
Lawless Webの特徴検出によるテイミングの記事で、Jonathan Sampsonは次のように述べています。
ブラウザのユーザーエージェント文字列をスニッフィングすることは、ロシアのルーレットをプレイすることに少し似ています。確かに、今回はロードされたチャンバーを避けたかもしれませんが、ゲームを続けていると、やや厄介な間違いをする可能性が高くなります。
Navigator.userAgent文字列は不変ではありません。それは変わる。変更されます。ブラウザがリリースされ、新しいバージョンが配布され、ブラウザが異なるオペレーティングシステムにインストールされ、ソフトウェアがブラウザと並行してインストールされ、アドオンがブラウザ内にインストールされると、この文字列は変更されます。つまり、今日嗅ぐのは明日嗅ぐものではありません。
Chrome 、 Firefox 、 Opera 、および Internet Explorer のいくつかの例をざっと見てみましょう。結論としては、ユーザーエージェントの文字列ビュッフェに近づいたときに何が得られるか確信が持てないということです。すぐにわかるように、上記のアプローチはOperaのバージョン12とそのバリエーションに一貫して一致しません。
では、スニッフィングが悪いことを徹底的に確信しましたか?そして、あなたが生きる限り、あなたはそれを誓いましたか?それを置き換えるものをあげましょう。ほとんど失望させない信頼できるもの–機能検出。
機能検出とは、ブラウザに必要な機能に直接関連するテストを実行し、それが成功するか失敗するかを確認することです。たとえば、ブラウザが
<video>
タグをサポートしているかどうかは、要素の新しく作成されたインスタンスに正しいプロパティが配置されているかどうかを調べて確認できます。ブラウザーが.canPlayType
メソッドを要素に追加できなかった場合、サポートが存在しないか、依存するのに十分でないと考えられます。このアプローチでは、仮定を行う必要はありません。不十分に清掃されたデータと、どのブラウザーがどの機能をサポートするかについての単純な仮定を組み合わせることはありません。むしろ、ブラウザーをステージに招待し、トリックを実行するように要求します。成功した場合は、報酬を差し上げます。それが失敗した場合、私たちはそれを捨て、別のアプローチをとります。
あなたが書く必要のあるすべてのテストについて考えている今、あなたはきっと今のところびっくりするかもしれません。 localStorageがサポートされているかどうか、グラデーション、ビデオ、オーディオ、または地理位置情報を確認したい場合があります。地球上の誰がそれらのテストのすべてを書く時間を持っていますか?さまざまなテクノロジーを身近に学べるのは言うまでもありませんか?これは、コミュニティがその日を救った場所です。
Modernizr は、何十人もの有能な開発者によって作成された機能検出テストが満載のオープンソースライブラリで、すべてが新しいプロジェクトにドロップできる使いやすいソリューションにバンドルされています。 Modernizrのカスタムダウンロードをビルドしてプロジェクトにドロップし、条件付きですべての訪問者に最高のエクスペリエンスを提供します。
Modernizrは、さまざまなプロパティを持つグローバルModernizrオブジェクトを公開します。 Modernizrオブジェクトのプロパティを呼び出すだけで、特定の機能のサポートをテストできます。
if ( Modernizr.video ) { // Browser supports the video element }
さらに、オプションで要素にクラスを追加して、CSSがアクションに参加できるようにすることもできます。これにより、機能サポートに基づいてドキュメントに条件付き調整を行うことができます。
html.video { /* Woot! Video support. */ } html.no-video #custom-video-controls { /* Bummer. No video support. */ display: none; }
useragent
オブジェクト内にあるnavigator
を信頼しない最初の理由は正しいです。あなたの質問への答えとして、私は#1と#2に何かを追加したいと思います。ブラウザーはしばしばuseragent
の値を変更します。
私の現在のブラウザでは、window.navigator.userAgent
の結果は次のとおりです。
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36"
では、どのブラウザを実行していますか? Mozilla?サファリ?クロム?現在、私はChrome v34を実行しています。先日、これをChromeで実行しましたが、ChromeがuserAgent
文字列。ブラウザがこの値を変更して、ブラウザが検出しようとしているサイトをバイパスすることがよくあるというのが私の理解です。
したがって、私の最大の懸念は、userAgent
文字列の解析の妥当性です。しかし WhichBrowser はしばしば正確です(以前は正しく表示されていませんでしたが、ほとんど表示されていません)。
解析で正確な結果が得られると仮定すると、たとえそれが評判に影響を与えることはほとんどありません。企業の世界の多くは、使用が許可されているソフトウェアまたはソフトウェアのバージョンの厳しいガイドラインに慣れています。製品がブラウザ用に最適化されていないことを知らせる警告を表示するだけのようです。これと同じような警告であれば、問題はありません。ブラウザを介して明示的にアクセスできないようにすると、問題が発生します。
上記は、問題が発生する可能性のあるブラウザのバージョンを検出するための適切で妥当なUXの例です。
誤った動作を簡単に説明しているため、多くの助けを求めています。それは基本的に、「あなたが続けるならば、あなたはあなた自身でいる」と言います。
私は問題なくBTWを続けました。しかし、もしあったら、私は助けを要求する気になりませんでした。私は警告されていました。