最近の Android デバイスではネイティブ (Android) ブラウザと Google Chrome を区別する必要がありますが、特に最近の Samsung デバイス (Galaxy S4、Galaxy S4 mini、Galaxy Mega) では問題が発生し続けています。
ブラウザから送信されたユーザー エージェントを分析して、どのブラウザが使用されているかを判断しようとする、社内のデバイス検出機能があります。従来、Chrome を検出するために、コードはユーザー エージェント内で「Chrome」または「CriOS」のいずれかを探していました。通常、これらはユーザー エージェント文字列の最後の部分に存在します (ユーザー エージェントに関するウィキペディアの記事によると、これは利用可能な拡張機能を示します)。
ごく最近まで、これは問題なく機能していました*。
Android 4.2.2 を実行している最新の Samsung Galaxy デバイス (上記) では、ネイティブ ブラウザはユーザー エージェント文字列で「Chrome」を返します。この件について簡単に読んだところによると、これはネイティブ ブラウザが Chromium を使用しているためです (認めますが、この件について少し読むまで、Chromium と Chrome の違いがわかりませんでした。詳細はこちらを参照してください)。
これにより、ここで提案されている Chrome 機能検出の使用も無効になります。
これに関する主な問題は、2 つのブラウザー間でわずかなレンダリングの違いが見られることです。これは、通常はブラウザー固有の CSS ハック ** で処理されますが、現在は使用できません。
これまでのところ、この問題は Samsung Galaxy デバイスでのみ確認されています。Android 4.2.2 を実行している Nexus 4 でテストした場合、ネイティブ ブラウザはユーザー エージェントの一部として Chrome を返しません。これは、Android 4.2.2 を実行している Samsung Galaxy デバイスに非常に固有の問題である可能性がありますが、現時点では、テストするのに十分な範囲のデバイスがありません。
上記の 2 つの方法のいずれかを使用せずに、2 つのブラウザーを確実に区別する方法を知っている人はいますか?
*これは、私たちが気付いた、または私たちに報告された問題はありません。
**はい、ハックを使用することが最善の方法ではないことはわかっていますが、ハックを使用したり、コードの大部分を書き直したりすると、ハックが勝つ傾向があります。