我们发现许多手机上的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允许重定向。
答案 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";
}