【问题标题】:Browser detection from server with Java使用 Java 从服务器检测浏览器
【发布时间】:2015-04-08 07:24:54
【问题描述】:

我正在使用以下代码缓存不同的浏览器,我无法缓存特定的浏览器。

谁能给我一些建议?

if (user.contains("msie")) {
                    String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
                    browser = substring.split(" ")[0].replace("MSIE", "IE") + "-"+ substring.split(" ")[1];
                } else if (user.contains("safari") && user.contains("version")) {
                    browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]+ "-"+ (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
                } else if (user.contains("opr") || user.contains("opera")) {
                    if (user.contains("opera"))
                        browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]+ "-"+ (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
                    else if (user.contains("opr"))
                        browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-")).replace("OPR","Opera");
                } else if (user.contains("chrome")) {
                    browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
                } else if ((user.indexOf("mozilla/36.0") > -1)
                        || (user.indexOf("netscape6") != -1)
                        || (user.indexOf("mozilla/35.0") != -1)
                        || (user.indexOf("mozilla/34.0") != -1)
                        || (user.indexOf("mozilla/33.1") != -1)
                        || (user.indexOf("mozilla/33.0") != -1)
                        || (user.indexOf("mozilla/32.0") != -1)
                        || (user.indexOf("mozilla/31.0") != -1)) {

                    browser = "Netscape-?";

                } else if (user.contains("firefox")) {
                    browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
                } else if (user.contains("rv")) {
                    browser = "IE";
                } else {
                    browser = "UnKnown, More-Info: " + userAgent;
                }
            } catch (Exception e) {
                browser = "Exception: " + userAgent;
            }

【问题讨论】:

  • 您希望它如何工作?您正在一台未使用的机器上测试浏览器。
  • 已在生产环境中测试。
  • 弗拉迪斯拉夫:环境无关紧要。当您尝试确定客户端上的浏览器时,此代码在服务器上运行(如您所说)。为此,您需要一些客户端脚本。
  • useruserAgent这两个变量有什么关系?我知道 USER-AGENT 标头字段,但您不断在这些变量 userAgentuser 之间切换,这似乎没有关系。进一步注意,您的整个代码都包含在 if(user.contains("msie")) { 中,这排除了所有其他情况......
  • String browserDetails = request.getHeader("User-Agent");字符串 userAgent = browserDetails;字符串用户 = userAgent.toLowerCase()

标签: java jsp jakarta-ee


【解决方案1】:

为什么需要服务器端代码,你可以在 javascript 中轻松完成。

function detect() {
                var browser;
                var version;                
                var platform = navigator.platform;

                if (platform == "iPad" || platform == "iPhone" || platform == "iPod" || platform == "iPod touch") { // For iPhones iPads and iPods

                    var userAgent = navigator.userAgent.toUpperCase();

                    var chromeIndex = userAgent.indexOf("CRIOS");
                    var opera = userAgent.indexOf("OPIOS");
                    var ucIndex = userAgent.indexOf("UCBROWSER");
                    var coast = userAgent.indexOf("COAST");
                    var mercury = userAgent.indexOf("MERCURY");

                    var safari = userAgent.indexOf("SAFARI");
                    var webkit = userAgent.indexOf("APPLEWEBKIT");

                    // Chrome detection
                    if(chromeIndex > 0) {
                        browser = "chrome";

                        var arr = userAgent.split("CRIOS/");
                        arr = arr[1].split(".");
                        version = arr[0];
                    }
                    // Safari detection
                    else if(opera < 0 && ucIndex < 0 && coast < 0 && mercury < 0 && safari > 0 && webkit > 0) {
                        browser = "safari";

                        var arr = userAgent.split("APPLEWEBKIT/");
                        arr = arr[1].split(".");
                        version = arr[0];
                    } else {
                        browser = "unknown";
                        version = -1;
                    }

                } else if(platform == "Win32" || platform == "MacIntel") { // For windows and mac

                    // Browser detection
                    var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
                    // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
                    var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+
                    var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
                    // At least Safari 3+: "[object HTMLElementConstructor]"
                    var isChrome = !!window.chrome && !isOpera; // Chrome 1+
                    var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6


                    if (isOpera) {
                        browser = "opera";
                    } else if (isFirefox) {
                        browser = "firefox";
                    } else if (isChrome) {
                        browser = "chrome";
                    } else if (isIE) {
                        browser = "ie";
                    } else if (isSafari) {
                        browser = "safari";
                    } else {
                        browser = "unknown";
                    }

                    if (browser == "firefox") {
                        var arr = navigator.userAgent.split("Firefox/");
                        arr = arr[1].split(".");
                        version = arr[0];
                    } else if (browser == "chrome") {
                        var arr = navigator.userAgent.split("Chrome/");
                        arr = arr[1].split(".");
                        version = arr[0];
                    } else if (browser == "ie") {
                        var v1 = navigator.userAgent.indexOf("MISE");
                        var v2 = navigator.userAgent.indexOf("rv:");

                        if(v1 > 0) {
                            var arr = navigator.userAgent.split("MSIE ");
                            arr = arr[1].split(".");
                            version = arr[0];
                        } else if(v2 > 0){
                            var arr = navigator.userAgent.split("rv:");
                            arr = arr[1].split(".");
                            version = arr[0];
                        } else {
                            version = 11;
                        }
                    } else if (browser == "safari") {
                        var arr = navigator.userAgent.split("AppleWebKit/");
                        arr = arr[1].split(".");
                        version = arr[0];
                    } else if (browser == "opera") {
                        var arr = navigator.userAgent.split("OPR/");
                        arr = arr[1].split(".");
                        version = arr[0];
                    } else if (browser == "unknown") {
                        version = -1;
                    }

                } else if(platform == "Android" || platform == "Linux armv7l") { // For android
                    var userAgent = navigator.userAgent;

                    var chromeIndex = userAgent.indexOf("Chrome");
                    var opera = userAgent.indexOf("OPR");
                    var ucIndex = userAgent.indexOf("UCBrowser");
                    var coast = userAgent.indexOf("Coast");
                    var firefox = userAgent.indexOf("Firefox");

                    // Chrome detection
                    if(chromeIndex > 0 && opera < 0 && ucIndex < 0 && coast < 0) {
                        browser = "chrome";

                        var arr = userAgent.split("Chrome/");
                        arr = arr[1].split(".");
                        version = arr[0];

                    } else if(firefox > 0) { // Firefox detection
                        browser = "firefox";

                        var arr = userAgent.split("Firefox/");
                        arr = arr[1].split(".");
                        version = arr[0];

                    } else if(opera > 0) { // Opera detection
                        browser = "opera";

                        var arr = userAgent.split("OPR/");
                        arr = arr[1].split(".");
                        version = arr[0];

                    } else { // Unknown browser
                        browser = "unknown";
                        version = -1;
                    }

                } else { // For other platforms
                    version = -1;
                    browser = "other_platform";
                }

我在我的应用程序中使用了这个脚本,你会发现这很有帮助。

【讨论】:

  • 是否有检测和操作系统的代码?谢谢 soumitri pattnaik
  • soumitri pattnaik 您如何将此浏览器信息发送到服务器?
  • 可以在cookie中设置,也可以从服务器读取cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2011-09-04
  • 1970-01-01
  • 2011-03-26
  • 2010-10-14
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多