山岡 (2011年2月24日 11:43) 産業システム部 / JAVA
/** ブラウザ不明 */ public static String BROWSER_UNKNOWN = "0"; /** ブラウザIE */ public static String BROWSER_IE = "1"; /** ブラウザFirefox */ public static String BROWSER_FIREFOX = "2"; /** ブラウザOpera */ public static String BROWSER_OPERA = "3"; /** ブラウザChrome */ public static String BROWSER_CHROME = "4"; /** ブラウザSafari */ public static String BROWSER_SAFARI = "5"; /** ブラウザNetscape */ public static String BROWSER_NETSCAPE = "6"; /** * ブラウザの判定を行います。 * @param request {@link HttpServletRequest} * @return ブラウザを表す文字列 */ public static String getBrowser(HttpServletRequest request) { String sUserAgent = request.getHeader("user-agent"); if ( isIE(sUserAgent) ) { return BROWSER_IE; } if ( isFirefox(sUserAgent) ) { return BROWSER_FIREFOX; } if ( isOpera(sUserAgent) ) { return BROWSER_OPERA; } if ( isChrome(sUserAgent) ) { return BROWSER_CHROME; } if ( isSafari(sUserAgent) ) { return BROWSER_SAFARI; } if ( isNetscape(sUserAgent) ) { return BROWSER_NETSCAPE; } return BROWSER_UNKNOWN; } /** * ブラウザがIEであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return IEであるかどうか */ public static boolean isIE(String sUserAgent) { Pattern pattern = Pattern.compile(".*((MSIE)+ [0-9]\\.[0-9]).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがFirefoxであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Firefoxであるかどうか */ public static boolean isFirefox(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Firefox/)+[0-9]\\.[0-9]\\.?[0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがOperaであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Opereであるかどうか */ public static boolean isOpera(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Opera)+/? ?[0-9]\\.[0-9][0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがChromeであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Chromeであるかどうか */ public static boolean isChrome(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Chrome)+/?[0-9]\\.?[0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがSafariであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Safariであるかどうか */ public static boolean isSafari(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Version/)+[0-9]\\.?[0-9]?\\.?[0-9]? Safari).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがNetscapeであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Netscapeであるかどうか */ public static boolean isNetscape(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Netscape)+[0-9]\\.[0-9][0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; }
【Java】User-Agentによるブラウザ判別の実装
山岡 (2011年2月24日 11:43)
産業システム部 / JAVA
ユーザーがどのようなブラウザを使用していても操作感が変わらないように、ブラウザによって処理を分岐させなくてはならないことがあります。
例を1つあげると、ファイルをダウンロードするときの処理があります。
ファイルダウンロード時はレスポンスヘッダーの値が同じでもブラウザによって挙動が違うものがあります。
そのため、同じような動作を実現させるためには、ブラウザを判別して各々のブラウザに合わせて処理を記述することが必要になります。
ということで、今回はJavaのコード内でブラウザを判別する方法を紹介します。
判別方法は、リクエスト内のUser-Agentを参照するというスタンダードな方法です。
判別できるブラウザは次の6種類になります。
・Internet Explorer
・Firefox
・Opera
・Google Chrome
・Safari
・Netscape
携帯やスマートフォンには対応していませんので、必要であればコードを書き換えてください。 ご覧いただければ分かる通りシンプルかつスマートなコードになっていますので、メソッドを追加して正規表現をブラウザのUser-Agentに合わせるだけで対応できます。
/** ブラウザ不明 */ public static String BROWSER_UNKNOWN = "0"; /** ブラウザIE */ public static String BROWSER_IE = "1"; /** ブラウザFirefox */ public static String BROWSER_FIREFOX = "2"; /** ブラウザOpera */ public static String BROWSER_OPERA = "3"; /** ブラウザChrome */ public static String BROWSER_CHROME = "4"; /** ブラウザSafari */ public static String BROWSER_SAFARI = "5"; /** ブラウザNetscape */ public static String BROWSER_NETSCAPE = "6"; /** * ブラウザの判定を行います。 * @param request {@link HttpServletRequest} * @return ブラウザを表す文字列 */ public static String getBrowser(HttpServletRequest request) { String sUserAgent = request.getHeader("user-agent"); if ( isIE(sUserAgent) ) { return BROWSER_IE; } if ( isFirefox(sUserAgent) ) { return BROWSER_FIREFOX; } if ( isOpera(sUserAgent) ) { return BROWSER_OPERA; } if ( isChrome(sUserAgent) ) { return BROWSER_CHROME; } if ( isSafari(sUserAgent) ) { return BROWSER_SAFARI; } if ( isNetscape(sUserAgent) ) { return BROWSER_NETSCAPE; } return BROWSER_UNKNOWN; } /** * ブラウザがIEであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return IEであるかどうか */ public static boolean isIE(String sUserAgent) { Pattern pattern = Pattern.compile(".*((MSIE)+ [0-9]\\.[0-9]).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがFirefoxであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Firefoxであるかどうか */ public static boolean isFirefox(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Firefox/)+[0-9]\\.[0-9]\\.?[0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがOperaであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Opereであるかどうか */ public static boolean isOpera(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Opera)+/? ?[0-9]\\.[0-9][0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがChromeであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Chromeであるかどうか */ public static boolean isChrome(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Chrome)+/?[0-9]\\.?[0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがSafariであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Safariであるかどうか */ public static boolean isSafari(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Version/)+[0-9]\\.?[0-9]?\\.?[0-9]? Safari).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; } /** * ブラウザがNetscapeであるかどうかの判定を行います。 * @param sUserAgent ユーザエージェント * @return Netscapeであるかどうか */ public static boolean isNetscape(String sUserAgent) { Pattern pattern = Pattern.compile(".*((Netscape)+[0-9]\\.[0-9][0-9]?).*"); Matcher matcher = pattern.matcher(sUserAgent); boolean bMatch = matcher.matches(); return bMatch; }