uni-app plus.runtime.restart 之后导致 ua 变成 null

uni-app plus.runtime.restart 之后导致 ua 变成 null

项目信息 详情
HBuilderX版本号 3.2.16
手机系统 Android
手机系统版本号 Android 10
手机厂商 vivo
手机机型 Y70t
打包方式 云端

操作步骤:

复现步骤

  1. plus.navigator.getUserAgent() 正常:
    Mozilla/5.0 (Linux; Android 10; V2002A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045738 Mobile Safari/537.36 Html5Plus/1.0 StatusBar/33
    
  2. plus.navigator.setUserAgent("test", false) 正常;
  3. plus.runtime.restart() 正常;
  4. 应用重启后 plus.navigator.getUserAgent() 异常,结果为 null

预期结果:

plus.navigator.getUserAgent() 正常:
Mozilla/5.0 (Linux; Android 10; V2002A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045738 Mobile Safari/537.36 Html5Plus/1.0 StatusBar/33

实际结果:

plus.navigator.getUserAgent() 异常:
null

更多关于uni-app plus.runtime.restart 之后导致 ua 变成 null的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

HX3.3.7+已修复该问题

更多关于uni-app plus.runtime.restart 之后导致 ua 变成 null的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我试试

bug 已确认

苹果是否也有存在问题?

回复 小七ing: 我这边测试是正常的

回复 小七ing: 我这边测试iphone 是正常的

回复 DCloud_Android_DQQ: 好的,那我安卓先不升级

这是一个已知问题,在特定版本的HBuilderX和Android环境下,plus.runtime.restart()重启应用后,plus.navigator.getUserAgent()可能返回null

问题原因: plus.navigator.setUserAgent()设置的UA值在应用重启时未能正确持久化或恢复。重启后,系统可能未正确初始化WebView的UserAgent设置,导致获取失败。

临时解决方案:

  1. 延迟获取:在应用重启后,延迟一段时间再获取UA。

    setTimeout(() => {
        let ua = plus.navigator.getUserAgent();
        console.log('UA:', ua);
    }, 500);
    
  2. 监听WebView就绪事件:在plusready事件后再获取UA。

    document.addEventListener('plusready', function() {
        let ua = plus.navigator.getUserAgent();
        console.log('UA:', ua);
    }, false);
    
  3. 本地缓存UA:在设置UA前,先获取并缓存原始UA值。

    // 首次启动时缓存UA
    const originalUA = plus.navigator.getUserAgent();
    uni.setStorageSync('original_ua', originalUA);
    
    // 重启后使用缓存的UA
    let ua = plus.navigator.getUserAgent();
    if (!ua) {
        ua = uni.getStorageSync('original_ua');
    }
回到顶部