この記事の翻訳にご協力くださいブラウザーによって異なるウェブページまたはサービスを提供するのは、ふつうは良いことではありません。ウェブは使用しているブラウザーや機器に関係なく、誰からでもアクセスできるものです。ウェブサイトを開発する方法として、特定のブラウザーを対象にするのではなく、機能が利用できるかどうかに基づいたプログレッシブエンハンスメントにする方法があります。ブラウザーや標準は完全ではなく、ブラウザーの判定を必要とする場合も稀にあります。ユーザーエージェント文字列を使用してブラウザーを判定することは簡単に見えますが、うまく行くようにするのは、実はとても難しい問題です。この文書では、これをできるだけ正しく行う方法を案内します。ユーザーエージェントを調べるのが良いことはめったにありません。問題を解決するには、もっと良い、もっと広く互換性のある方法が見つかるはずです。ブラウザーの判定を用いる前に考えることユーザーエージェント文字列を使用して、使用されているブラウザーを判定することを検討している場合は、できればまずは回避するようにしてください。それをやりたいのかを見分けることから始めましょう。ブラウザーのあるバージョンの特有のバグを回避しようとしているのですか?専門のフォーラムで見たり尋ねたりしてみましょう。この問題に最初に遭遇したのがあなたであることはほとんどありません。専門家、あるいは単に別の視点を持つ人々が、バグを回避するためのアイディアをくれるかもしれません。介してブラウザーのベンダーに報告されているかどうかを確認することが重要です。ブラウザーメーカーはバグレポートに注意を払い、そのバグの他の回避策を分析するかもしれません。特定の機能が存在するかどうか確認しようとしているのですか?一部のブラウザーがまだ対応していない特定のウェブ機能をサイトで使用する必要がある場合、未対応のブラウザーのユーザーには、より機能が少ないものの動作することが分かっている古いウェブサイトを送信したい場合があります。これはユーザーエージェントの検出を使用する最悪の理由です。この差は最終的に他のすべてのブラウザーが追いつくからです。それほど一般的でないブラウザーを1つ1つ全てテストするのは現実的ではありません。ユーザーエージェントによる判定は決して行うべきではありません。その代わりに常に機能の検出を行う代替手段があります。提供する予定ですか?通常では悪い慣例ですが、これが必要な場合もあります。このような場合は、まず自分の状況を分析してそれが本当に必要であることを確認してください。純度をいくらか損なっても構わないくらい難しいものです。デザインを考え直してください。プログレッシブエンハンスメントや流体レイアウトを使用することで、回避することはできませんか?ユーザーエージェントの判定の回避ユーザーエージェントの検出を使用しないようにするのであれば、いくつかの選択肢があります。機能の検出とは、ページを表示しているブラウザーを特定するのではなく、必要な機能が利用可能であるかどうかを確認することです。利用できない場合は代替手段を使用します。実装しているか検査する処理を実装し、そこから使い方を判断しましょう。機能の検出の今のところ良い例は次の通りです。正規表現に実験的な後方参照の対応を追加しましたが、他のブラウザーは今のところ対応していません。間違って以下のようにするべきと思うかもしれません。"hy"]しかし、上記のコードは絶対的に劣悪で、分かりにくいものです。使用したらどうなりますか?このリストはひどい間違いであることを繰り返します。したがって、次のような機能の検出を代わりに使用してください。str.replace(/[A-Z]/g,"z$1").split(/z(?=[A-Z])/g);};上記のコードが示すように、ブラウザーの対応をユーザーエージェントの判定なしに行う方法は常にあります。このためにユーザーの文字列をチェックする理由は決してありません。最後に、上記のコードスニペットは、常に考慮しなければならないクロスブラウザーのコーディングで重大な問題を引き起こします。意図せず使用しないでください。これは明らかでシンプルに聞こえるかもしれませんが、そうでない時もあります。