uniapp的webview与vue项目通信

文章讲述了如何在Vue的H5项目中向uniapp的webview传值,并利用uniapp的内置方法uni.navigateTo进行页面切换。关键步骤包括在index.html引入uniapp的JS桥接库,注册UniAppJSBridgeReady事件监听器,以及通过全局变量和事件通信在vue页面与index.html之间传递信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:vue的h5项目,向uniapp嵌入的webview里面传值,调uniapp的页面切换路由方法,uni.navigateTo
(注:uniapp的webview组件地址,https://uniapp.dcloud.net.cn/component/web-view.html#web-view)
思路:
1、在vue项目的index.html中引入<script type="text/javascript" src="https://unpkg.com/@dcloudio/[email protected]/index.js"></script>,必须引,才能使用uniapp的内部方法
2、通过注册UniAppJSBridgeReady事件,在里面调用uniapp提供的相关方法,实现数据通信(注:也是在index.html中)
<script>
    document.addEventListener('UniAppJSBridgeReady', function() {
      uni.webView.getEnv(function(res) {
        console.log('当前环境:' + JSON.stringify(res));
      });
      // uni.webView.navigateTo(...)
    });
  </script>
  注:支持的uniapp方法有如下:
  uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab,uni.navigateBack,uni.postMessage(h5端向app端发送消息),uni.getEnv(获取当前环境)
  
3、当前的问题是如何实现index.html与操作的vue页面之间进行通信,解决方法如下:
    1>在main.js为window绑定一个全局变量,eventBus,通过vue兄弟组件传值的形式($emit,$on)
    window.eventBus=new Vue();
    window.isShowMap=false;
    2&g
### UniApp WebViewH5页面通信的方法 #### 使用URL带参数传递数据 一种简单的方式是在加载网页时通过URL附加查询字符串来传输少量的数据。这种方式适用于初始化配置或简单的状态共享。 ```javascript // 在UniApp应用中构建带有参数的URL并导航至该地址 this.$router.push({ path: '/pages/webView', query: { paramKey: 'value' } }); ``` 当目标HTML文档接收到请求后,可以通过`window.location.search`解析这些参数[^1]。 #### 利用 `evalJS` 方法执行JavaScript代码片段 对于更复杂的交互需求,可以采用`evalJS`函数直接注入一段脚本到Web视图内部运行环境里去操作DOM节点或是调用已定义好的API接口。 ```javascript const webViewRef = uni.createSelectorQuery().select('#myWebView'); webViewRef.evalJS('alert("Hello from Native!");').exec(); ``` 此功能允许原生层主动触发前端逻辑更新而无需刷新整个页面资源。 #### 调用 `postMessage` API 实现双向通讯机制 为了建立更加灵活的消息交换渠道,推荐使用现代浏览器支持的标准跨源通信协议——即`postMessage()`方法配合监听器模式完成信息流转过程。 ##### H5 向 APP 发送消息 在外部网站内编写如下代码: ```html <!-- HTML 文件 --> <script type="text/javascript"> if (typeof window.uni !== 'undefined') { // 检查是否存在uni对象以确认当前处于uni-app环境中 const dataToPass = JSON.stringify({ key: 'someValue' }); window.uni.postMessage(dataToPass); } </script> ``` ##### APP 接收来自 H5 的通知 而在宿主程序这边,则需设置好相应的处理器等待接收到来自子窗口发出的通知包: ```vue <template> <!-- 组件模板部分省略... --> <web-view id="myWebView" src="/path/to/h5/page.html" @message="onReceive"></web-view> </template> <script> export default { methods: { onReceive(event) { console.log(`Received message from web page: ${event.detail.data}`); try { const parsedData = JSON.parse(event.detail.data); // 处理接收到的数据... } catch (_) {} } } }; </script> ``` 上述流程展示了如何利用内置事件绑定特性轻松捕获由远端站点推送过来的有效负载,并对其进行进一步处理[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值