ユーザーが自分のサイトにアクセスしているブラウザ (IE、Firefox、Opera) を検出するにはどうすればよいですか? Javascript、PHP、ASP、Python、JSP、および考えられるその他の例は役に立ちます。この情報を取得する言語に依存しない方法はありますか?
11 に答える
リクエストを処理するための場合は、着信リクエストのUser-Agentヘッダーを調べます。
更新: レポート用の場合は、アクセス ログに User-Agent を記録するように Web サーバーを構成してから、AWStatsなどのログ分析ツールを実行します。
更新 2:参考までに、User-Agent に基づいてリクエストを処理する方法を変更することは、通常(常にではありませんが) 悪い考えです。
さまざまなブラウザからのユーザー エージェント文字列の包括的なリスト
リストは本当に大きいです:)
彼らが送信しているUser-Agentを見てみましょう。任意のエージェントを送信できるため、100% 絶対確実というわけではありませんが、特別な理由がない限り、ほとんどの人はエージェントを変更しないことに注意してください。
簡単で汚い Java サーブレットの例
private String getBrowserName(HttpServletRequest request) {
// get the user Agent from request header
String userAgent = request.getHeader(Constants.BROWSER_USER_AGENT);
String BrowesrName = "";
//check for Internet Explorer
if (userAgent.indexOf("MSIE") > -1) {
BrowesrName = Constants.BROWSER_NAME_IE;
} else if (userAgent.indexOf(Constants.BROWSER_NAME_FIREFOX) > -1) {
BrowesrName = Constants.BROWSER_NAME_MOZILLA_FIREFOX;
} else if (userAgent.indexOf(Constants.BROWSER_NAME_OPERA) > -1) {
BrowesrName = Constants.BROWSER_NAME_OPERA;
} else if (userAgent.indexOf(Constants.BROWSER_NAME_SAFARI) > -1) {
BrowesrName = Constants.BROWSER_NAME_SAFARI;
} else if (userAgent.indexOf(Constants.BROWSER_NAME_NETSCAPE) > -1) {
BrowesrName = Constants.BROWSER_NAME_NETSCAPE;
} else {
BrowesrName = "Undefined Browser";
}
//return the browser name
return BrowesrName;
}
クライアント側では、navigation.userAgentオブジェクトを使用してJavascriptでこれを行うことができます。大まかな例を次に示します。
if (navigator.userAgent.indexOf("MSIE") > -1)
{
alert("Internet Explorer!");
}
else if (navigator.userAgent.indexOf("Firefox") > -1)
{
alert("Firefox!");
}
より詳細で包括的な例はここにあります:http://www.quirksmode.org/js/detect.html
Javascriptとの互換性のためにブラウザー検出を行う場合は、通常、オブジェクト検出またはtry / catchブロックを使用する方が適切です。これは、スクリプトの隙間をすり抜けるとは思わなかったバージョンがないようにするためです。たとえば、これを行う代わりに...
if(navigator.userAgent.indexOf("MSIE 6") > -1)
{
objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
objXMLHttp = new XMLHttpRequest();
}
...これの方が良い:
if(window.XMLHttpRequest) // Works in Firefox, Opera, and Safari, maybe latest IE?
{
objXMLHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) // If the above fails, try the MSIE 6 method
{
objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
PHP の定義済みスーパーグローバル配列 $_SERVER には、HTTP リクエストで送信された User-Agent ヘッダーの値を含むキー「HTTP_USER_AGENT」が含まれています。 これはユーザー提供のデータであり、信頼できるものではないことに注意してください。ユーザーエージェント文字列を変更するユーザーはほとんどいませんが、時々発生します。
ASP.NET で HttpBrowserCapabilities クラスを使用できます。これはこのリンクのサンプルです
private void Button1_Click(object sender, System.EventArgs e)
{
HttpBrowserCapabilities bc;
string s;
bc = Request.Browser;
s= "Browser Capabilities" + "\n";
s += "Type = " + bc.Type + "\n";
s += "Name = " + bc.Browser + "\n";
s += "Version = " + bc.Version + "\n";
s += "Major Version = " + bc.MajorVersion + "\n";
s += "Minor Version = " + bc.MinorVersion + "\n";
s += "Platform = " + bc.Platform + "\n";
s += "Is Beta = " + bc.Beta + "\n";
s += "Is Crawler = " + bc.Crawler + "\n";
s += "Is AOL = " + bc.AOL + "\n";
s += "Is Win16 = " + bc.Win16 + "\n";
s += "Is Win32 = " + bc.Win32 + "\n";
s += "Supports Frames = " + bc.Frames + "\n";
s += "Supports Tables = " + bc.Tables + "\n";
s += "Supports Cookies = " + bc.Cookies + "\n";
s += "Supports VB Script = " + bc.VBScript + "\n";
s += "Supports JavaScript = " + bc.JavaScript + "\n";
s += "Supports Java Applets = " + bc.JavaApplets + "\n";
s += "Supports ActiveX Controls = " + bc.ActiveXControls + "\n";
TextBox1.Text = s;
}
Browsecap.iniをチェックしてください。リンクされたサイトには、複数のスクリプト言語用のファイルがあります。ブラウズキャップは、ユーザー エージェントを識別するだけでなく、ブラウザーの CSS サポート、JS サポート、OS (モバイル ブラウザーなど) に関する情報も持っています。
このページに移動して、browsecap.ini が現在のブラウザーについて教えてくれる情報の例を確認してください。
これを行うには、次の方法があります。
- Web サーバー ログを確認する。または
- HTML リクエスト (プレーン テキスト ストリーム) の User-Agent フィールドを処理前に確認する。
設定に依存している可能性があります。Linux の apache では、アクセス ログ /var/log/apache2/access_log に書き込まれます。
まず最初に、特定の Web ブラウザーにパッチを適用することは避けるのが最善であることに注意してください。 javascript には、すべての主要なブラウザーで機能する共通の分母サブセットがあります)。
つまり、HTTP 要求ヘッダーのユーザー エージェント タグには、クライアントの (要求された) ブラウザーが含まれています。これは、仕様ではなく特定のブラウザーに対して作業している人々のために本当に混乱していますが、実際のブラウザーを特定するのは少し難しい場合があります.
これに対して一致します。
ブラウザを含む
ファイアフォックス -> ファイアフォックス
MSIE -> Internet Explorer
Opera -> Opera (Mozilla のふりをしない数少ないブラウザの 1 つです :) )
「ボット」または「クローラー」という単語を含むエージェントのほとんどは通常ボットです (ログなどから省略できます)。