uniapp app内嵌h5的通信方式

本文介绍了如何在uniapp的app壳子中内嵌h5页面,并利用uniapp的SDK将扫码能力赋予h5。主要步骤包括在h5端引入uni的js桥接库,监听UniAppJSBridgeReady事件,以及在app端通过web-view组件监听message事件,使用uni.scanCode接口进行扫码,并通过evalJS将结果传回h5。

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

笔者由于项目需要,需要在一个app壳子中内嵌h5来实现业务,需要用到app的扫码能力,顾整理此篇文章,贴一个官方地址https://uniapp.dcloud.net.cn/component/web-view.html#web-view

  1. h5端

将uni的sdk下载到本地https://unpkg.com/@dcloudio/[email protected]/index.js

在main.js中引入,当然为了纯洁也可以单独写个文件,然后监听其UniAppJSBridgeReady,待UniAppJSBridgeReady触发后将uni的api挂载到原型上

import * as myUni from './js/index.js'
document.addEventListene
uni-app中,当H5页面需要调用原生APP提供的Promise API时,你需要使用uni-app提供的JSBridge机制来实现跨端通信。以下是一个基本步骤: 1. **H5端发起请求**: H5代码中,你可以创建一个JavaScript函数,这个函数会包装你的网络请求,并通过`uni.request`或者`uni.createSelectorQuery()`的方式触发,然后把这个函数名发送给APP,示例: ```javascript function makeNativeRequest() { uni.request({ url: 'your-native-api-url', data: { key: 'value' }, method: 'POST', // 或GET等 success(res) { console.log('Native response:', res.data); } }).catch(err => { console.error('Error:', err); }); } window.postMessage('makeNativeRequest', '*'); // 发送给APP ``` 2. **APP端接收并处理请求**: 在uni-appApp.vue或者某个生命周期钩子中,监听`messageHandler`事件来处理H5发来的消息: ```javascript mounted() { uni.addEventListener('message', this.handleMessage, this); }, beforeDestroy() { uni.removeEventListener('message', this.handleMessage); }, handleMessage(e) { if (e.data === 'makeNativeRequest') { this.makeNativeAPI(e.detail); } }, makeNativeAPI(data) { const nativePromise = new Promise((resolve, reject) => { // 在这里处理你的原生请求,如使用wx.request或asyncTask等 wx.request({ ..., success(res) { resolve(res.data); }, fail(error) { reject(error); } }); }); nativePromise.then(data => { window.postMessage({ result: data }, '*'); }).catch(error => { window.postMessage({ error: error.message }, '*'); }); } ``` 3. **APP中异步任务的回调**: 当原生请求完成,APP会在H5的`message`事件中返回结果,这时候H5可以在接收到消息后做进一步处理。 注意:这是一个简化的例子,实际项目中你可能还需要处理更多的边界情况,以及错误处理。此外,确保在H5APP之间传递的数据安全可靠。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值