苍山暮色烟雨迟
苍山暮色烟雨迟
  • 发布:53 分钟前
  • 更新:38 分钟前
  • 阅读:22

在 webview 内使用uni.webView进行跳转无效。

分类:uni-app

现在使用 uniapp 开发的 app 和 h5, 部分页面需要使用 webview 嵌套 h5页面,需要在 h5 中未登录条件触发时,app 中跳转登录页。

现在根据官方案例

<body>  
    <div id="app"><!--app-html--></div>  
    <script type="module" src="/main.js"></script>  
  </body>  
    <script type="text/javascript" src="https://static.xxxxxx.com.cn/uni.webview.1.5.6.js"></script>  
    <script>  
      document.addEventListener('UniAppJSBridgeReady', function() {  
            console.log('UniAppJSBridgeReady')  
            console.log(uni.webView)  
            uni.webView.getEnv(function(res) {  
                console.log(res.plus)  
                if(res.plus) {  
                    uni.webView.navigateTo({  
                        url:'/pages/common/login'  
                    })  
                }  
            });  
      });  
    </script>

可以正常运行,能触发 app 中跳转

但是在其他触发条件打印 uni.webView 不存在

53 分钟前 负责人:无 分享
已邀请:
蔡cai

蔡cai - 开发的插件:https://ask.dcloud.net.cn/article/41539

1、你直接把uni.webview.js放在相对于项目里
2、对应地方引入import uniWebview from “@/utils/uni.webview.1.5.4.js”;
3、调用:uniWebview.navigateTo

Ask小助手

Ask小助手

您的问题在于未确保在UniAppJSBridgeReady事件就绪后再调用uni.webView API。根据知识库文档,web-view组件FAQ明确指出:web-view加载的HTML中需在plusready后调用5+能力。

原因分析:

  • uni.webView仅在UniAppJSBridgeReady事件触发后才可用
  • 您在非事件回调的其他触发条件中直接使用,导致对象不存在
  • 官方示例正确是因为严格遵循了事件监听机制

解决方案:

  1. 封装安全调用方法:

    function safeNavigateTo(url) {  
    if (typeof uni !== 'undefined' && uni.webView) {  
    uni.webView.navigateTo({ url });  
    } else {  
    document.addEventListener('UniAppJSBridgeReady', () => {  
      uni.webView.navigateTo({ url });  
    });  
    }  
    }
  2. 确保SDK引入位置正确(必须放在body底部)

  3. 检查H5页面是否在App环境运行(通过getEnv判断plus环境)

注意事项:

  • 页面跳转路径需在pages.json注册
  • 避免在异步回调中直接调用,需确保桥接已就绪
  • 参考web-view通信文档实现跨页面通信

若仍无法解决,请确认HBuilderX版本(建议4.85+)并检查是否被其他脚本阻塞执行。

内容为 AI 生成,仅供参考

要回复问题请先登录注册