原文链接:https://blog.csdn.net/lovelyelfpop/article/details/78507686
原因
Android 8.0 的 浏览器 UserAgent 如下:
Mozilla/5.0 (Linux; Android 8.0.0; Pixel C Build/OPR1.170623.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Safari/537.36
Sencha Touch / ExtJS 6 的浏览器识别逻辑,把它认为了是 Opera 浏览器,因为 Sencha 的判断逻辑如下:
刚好 Android 8.0 UserAgent 字符串里面有个 OPR
。
UserAgent 字符串是有标准的,如下:
- Phone UA:
Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>) AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Chrome/<Chrome Rev> Mobile Safari/<WebKit Rev>
- Tablet UA:
Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>) AppleWebKit/<WebKit Rev>(KHTML, like Gecko) Chrome/<Chrome Rev> Safari/<WebKit Rev>
Pixel C Build/OPR1.170623.026; wv
这段内容是 build 号。
解决办法
编辑器打开下面的文件
- Sencha Touch:
yourApp\touch\sencha-touch-all-debug.js
yourApp\touch\src\env\Browser.js
- ExtJS 6:
yourApp\ext\build\ext-all-debug.js
yourApp\ext\build\ext-modern-all-debug.js
yourApp\ext\packages\core\src\env\Browser.js
找到上面图片中的代码,改成下面这样
if (userAgent.match(/FB/) && browserName === "Other") {
browserName = browserNames.safari;
engineName = engineNames.webkit;
}
if (userAgent.match(/Android.*Chrome/g)) {
browserName = 'ChromeMobile';
}
// bug fix: Android Oreo Chrome Browser detected as Opera
else {
browserMatch = userAgent.match(/OPR\/(\d+.\d+)/);
if (browserMatch) {
browserName = 'Opera';
browserVersion = new Ext.Version(browserMatch[1]);
}
}