HTTP_USER_AGENT
文字列が[ブラウザバージョンx]以降に対応する場合は、CSSアニメーションを含むリモートスタイルシートをロードするように指定することで、大量のPHPコードを回避しようとしています。たとえば、CSSアニメーションがChrome 19以降でサポートされていることを知っていると、コードはChromeのバージョンが19より大きいかどうかを検出し、適切なスタイルシートをロードします。
これはPHPを使用して実行可能ですか?
3 に答える
これは1つの解決策ですが、変更を含めるために、ユーザーエージェント文字列のパーサーを時々更新する必要があります。エージェント文字列を使用するための合意された標準はないため、一般に、ユーザーエージェント文字列の解析は非常に難しく、ルックアップテーブルに帰着することがよくあります。
より将来性のあるアプローチは、たとえば、 Modernizrを使用してクライアント側でCSSアニメーションのサポートを検出し、その結果に基づいてスタイルシートをロードすることです。そうすれば、ブラウザ開発者が将来ユーザーエージェント文字列(の構造)を変更したい場合でも、気にする必要はありません。
これにPHPを使用する必要がある場合は、必要な処理を実行する組み込み関数get_browser()
があります。
ただし...を使用する場合get_browser()
は、問題の悪い解決策であることに注意してください。
この機能を使用するには、最新のbrowsecap.ini
ファイルが必要です。これは基本的に、これまでにリリースされたすべてのブラウザとすべてのバージョンの機能を定義するテキストファイルです。
これの欠点は明らかです:
- そもそも、browsecap.iniの最新のコピーを見つけてインストールする必要があります。
- 新しいブラウザがリリースされるたびに更新する必要があります(新しいバージョンが頻繁にリリースされるため、これは非常に大きな作業です)。
- 検出したいすべての機能が含まれているとは限りません。
- ユーザーがユーザーエージェント文字列をマスクすると壊れます。
これらすべての理由から、get_browser()
PHPベースまたはサーバー側のソリューションを使用しないことを強くお勧めします。
代わりに、他の人が言っているように、Modernizrライブラリを使用して調査する必要があります。これは、ブラウザで機能を検出する、サイトにインストールするJavascriptライブラリです。機能がサポートされているかどうかを具体的に確認するため、古くなることはありません。したがって、実際のブラウザが何であるかは関係ありません。
デバイス記述リポジトリ(DDR)の使用を検討することをお勧めします。これは、ユーザーエージェント文字列を渡してそのユーザーエージェントの既知の機能のリストを取得できるアプリケーションまたはWebサービスです。
これの利点は、新しいユーザーエージェントが登場したときに独自のコードを更新し続ける必要がないことです。
最近、モバイルサイト開発に関するDinoEspositoのMSDN記事でDDRについて読みました。彼は、DDRの機能と性質について優れた記事を書いています。
PHPを使用していることは承知していますが、DDRの接続/クエリは言語に依存しない必要があります。
考えてみてください。これがお役に立てば幸いです。