修复 Sencha Touch / ExtJS 6 把 Android 8(Oreo) Chrome 识别为 Opera 的bug

原文链接: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 的判断逻辑如下:
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]);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘_博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值