检测股票Android浏览器和重新路由(JavaScript)

时间:2017-08-24 04:25:59

标签: javascript android angularjs

我们发现许多手机上的Stock Android浏览器无法使用我们的应用程序(内置于Angular 1)。 Polyfills没有修复它,我们目前的解决方案是检测这个浏览器并将其重定向到一个页面,该页面基本上说“该应用程序适用于Firefox和Chrome for Android,请下载其中一个!”

我目前的方法是在其他所有内容加载

之前将此脚本放在HTML的头部
<script>
    var isAndroid = navigator.userAgent.indexOf('Android') >= 0;
    var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.appVersion)[1], 10); 
    var isAOSP = isAndroid && webkitVer <= 534 && navigator.vendor.indexOf('Google') == 0;

    if(isAOSP){
        window.location = "/views/compatibility/compatibility.html";
    }
</script>

唯一的问题是它不起作用。我在browserstack上使用HTC M8测试它,它仍然将我们加载到破坏的首页,而不是重定向。

我知道脚本本身应该有效,因为如果我更改if (isAOSP == false)...,它会重定向我,而我在兼容的东西(如我的桌面)。我认为这些变量有问题,但我想问一下你们是否有任何建议!

谢谢=)

编辑:解决方案很简单,很容易找到感谢用户Jaromanda X.通过调试,我发现浏览器使用的是webkit版本537,我评估的内容少于534.改为537允许重定向。

1 个答案:

答案 0 :(得分:0)

正如用户Jaromanda X评论的那样,我们将代码更改为检测534以上。这就是最终代码的样子:

    var navU = navigator.userAgent;
    // Android Mobile
    var isAndroidMobile = navU.indexOf('Android') > -1 && navU.indexOf('Mozilla/5.0') > -1 && navU.indexOf('AppleWebKit') > -1;
    // Apple webkit
    var regExAppleWebKit = new RegExp(/AppleWebKit\/([\d.]+)/);
    var resultAppleWebKitRegEx = regExAppleWebKit.exec(navU);
    var appleWebKitVersion = (resultAppleWebKitRegEx === null ? null : parseFloat(regExAppleWebKit.exec(navU)[1]));
    // Chrome
    var regExChrome = new RegExp(/Chrome\/([\d.]+)/);
    var resultChromeRegEx = regExChrome.exec(navU);
    var chromeVersion = (resultChromeRegEx === null ? null : parseFloat(regExChrome.exec(navU)[1]));
    // Native Android Browser
    var isAndroidBrowser = isAndroidMobile && (appleWebKitVersion !== null && appleWebKitVersion <= 537) || (chromeVersion !== null && chromeVersion <= 38);

    //If isAndroidBrowser, redirect 
    if(isAndroidBrowser){
        window.location = "/views/compatibility/compatibility.html";
    }