uni-app 华为MatePad Pro 12.6英寸 HarmonyOS 2.0.0 plus.navigator.isSimulator() 返回true

uni-app 华为MatePad Pro 12.6英寸 HarmonyOS 2.0.0 plus.navigator.isSimulator() 返回true

| 开发环境 | 版本号 | 项目创建方式 |
|----------|--------|--------------|
| HBuilderX | 3.2.16 | 云端         |

产品分类:HTML5+

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:MatePad Pro 12.6英寸 Harmony 2.0.0

示例代码:

```html
<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="UTF-8" />  
        <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />  
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />  
        <title></title>  
    </head>  
    <body>  
        <div style="margin-top: 120px">  
            <div style="text-align: center"><img width="120px" height="120px" src="img/logo.png" /></div>  
            <div style="margin-top: 30px; font-size: 16px; text-align: center">Loading...</div>  
        </div>  
        <script type="text/javascript">  
            var plusReady = function (callback) {  
                if (window.plus) {  
                    return callback(window.plus);  
                }  
                document.addEventListener(  
                    'plusready',  
                    function () {  
                        callback(window.plus);  
                    },  
                    false  
                );  
            };  

            var quitApp = function () {  
                plusReady(function (plus) {  
                    var IS_IOS = plus.os.name === 'iOS';  
                    if (IS_IOS) {  
                        plus.ios.import('UIApplication').sharedApplication().performSelector('exit');  
                    } else {  
                        plus.runtime.quit();  
                    }  
                });  
            };  

            var isRoot = function () {  
                plusReady(function (plus) {  
                    var IS_IOS = plus.os.name === 'iOS';  
                    if (IS_IOS) {  
                        return plus.navigator.isRoot();  
                    } else {  
                        return isAndroidRoot();  
                    }  

                    function isAndroidRoot() {  
                        if (!IS_IOS) {  
                            return false;  
                        }  
                        var paths = [  
                            '/sbin/su',  
                            '/system/bin/su',  
                            '/system/xbin/su',  
                            '/data/local/xbin/su',  
                            '/data/local/bin/su',  
                            '/system/sd/xbin/su',  
                            '/system/bin/failsafe/su',  
                            '/data/local/su'  
                        ];  
                        var File = plus.android.importClass('java.io.File');  
                        for (var i = 0, l = paths.length; i < l; i++) {  
                            var path = paths[i];  
                            var fd = new File(path);  
                            if (fd.exists()) {  
                                return true;  
                            }  
                        }  
                        return false;  
                    }  
                });  
            };  
        </script>  
        <script type="text/javascript">  
            plusReady(function (plus) {  
                plus.screen.lockOrientation('portrait-primary');  
                var IS_IOS = plus.os.name === 'iOS';  

                if (plus.navigator.isSimulator()) {  
                    return plus.nativeUI.confirm(  
                        '禁止在模拟器中运行!',  
                        function (e) {  
                            console.log(e.index);  
                            quitApp();  
                        },  
                        {  
                            buttons: ['好吧']  
                        }  
                    );  
                }  

                if (isRoot()) {  
                    var notice = IS_IOS ? '您的设备已越狱,请注意防范风险。' : '您的设备已被ROOT,请注意防范风险。';  
                    plus.nativeUI.confirm(notice, function () {}, {  
                        title: '风险提示',  
                        buttons: ['知道了']  
                    });  
                }  
            });  
        </script>  
    </body>  
</html>  

操作步骤:

  • 加载如上html

预期结果:

  • 不弹框

实际结果:

  • 弹框: 禁止在模拟器中运行

bug描述:

  • 华为MatePad Pro 12.6英寸 HarmonyOS 2.0.0 plus.navigator.isSimulator() 返回true

更多关于uni-app 华为MatePad Pro 12.6英寸 HarmonyOS 2.0.0 plus.navigator.isSimulator() 返回true的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

我手机Harmony 2.0.0系统, 没有这个情况 更新HBX3.3.0 版本看看

更多关于uni-app 华为MatePad Pro 12.6英寸 HarmonyOS 2.0.0 plus.navigator.isSimulator() 返回true的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在华为MatePad Pro 12.6英寸(HarmonyOS 2.0.0)上,plus.navigator.isSimulator() 返回 true 是一个已知的设备识别问题。

原因分析:

  1. HarmonyOS 设备识别机制:早期HarmonyOS版本在某些设备上可能被错误识别为模拟器
  2. plus.navigator.isSimulator() 的实现逻辑:该方法通过检测设备特征来判断是否为模拟器,但HarmonyOS的设备特征可能与模拟器的特征有重叠
  3. 系统版本兼容性:HarmonyOS 2.0.0 是早期版本,可能存在与uni-app运行时的兼容性问题

解决方案:

方案一:针对HarmonyOS设备特殊处理

plusReady(function (plus) {
    // 检测是否为HarmonyOS设备
    var isHarmonyOS = plus.os.name === 'Android' && 
                     (plus.os.vendor === 'HUAWEI' || 
                      navigator.userAgent.indexOf('HarmonyOS') > -1);
    
    // 如果是HarmonyOS设备,跳过模拟器检测
    if (!isHarmonyOS && plus.navigator.isSimulator()) {
        return plus.nativeUI.confirm(
            '禁止在模拟器中运行!',
            function (e) {
                console.log(e.index);
                quitApp();
            },
            {
                buttons: ['好吧']
            }
        );
    }
    
    // 继续执行其他逻辑...
});

方案二:使用更精确的设备检测方法

function isRealDevice() {
    var plus = window.plus;
    if (!plus) return true;
    
    // HarmonyOS设备特殊处理
    var ua = navigator.userAgent;
    var isHarmonyDevice = ua.indexOf('HarmonyOS') > -1 || 
                         (plus.os.vendor === 'HUAWEI' && plus.os.version.indexOf('2.') === 0);
    
    if (isHarmonyDevice) {
        return true; // HarmonyOS设备视为真机
    }
    
    // 其他设备使用原逻辑
    return !plus.navigator.isSimulator();
}

方案三:临时绕过检测(不推荐)

// 临时方案:注释掉模拟器检测代码
// if (plus.navigator.isSimulator()) {
//     return plus.nativeUI.confirm(...);
// }
回到顶部