首页 > 编程语言 >uniapp小程序与H5之间的通信

uniapp小程序与H5之间的通信

时间:2023-12-06 16:33:25浏览次数:39  
标签:uniapp school qs 程序 通信 H5 userAgent uni JS

一、小程序端向H5传递参数

这个比较简单,就是利用web-view的src传递就行

1、创建承载web-view的.vue页面,代码如下:

<template>
    <view>
        <web-view :src="src" @message="handleMessage"></web-view>
    </view>
</template>

<script>
    import {
        mapGetters
    } from "vuex"
    import qs from "qs"
    export default {
        data() {
            return {
                src: ""
            }
        },
        computed: {
            ...mapGetters(['user', 'school', 'token', 'school_token'])
        },
        onl oad(option) {
            // decodeURI避免中文乱码,
            this.src = "xxxxxxx?" + decodeURI(qs.stringify({
                isView: 'true',
                school: this.school,
                token: this.token,
                school_token: this.school_token,
                user: this.user
            }))
        },
    }
</script>

2、H5接收参数

我是在App.vue页面获取的参数,可以把获取的参数缓存起来,看自己业务去

1     import qs from "qs"
2         onLaunch: function() {
3             console.log('App Launch')
4             const obj = qs.parse(window.location.href.split('?')[1]) || null;
5             if (obj && Object.keys(obj).length > 0) {
6             //如果有参数就对参数进行处理,但是有一点需要注意,如果传递过来的对象,最后一个属性值是字符串,后面值会自己跟一个  #/ ,具体为啥不知道,没有去找原因,反正我接收到的参数值是这样的,(我也是第一次用qs序列化参数,url拼接的是一个对象这样传参)
7             }
8         },

二、H5向小程序端传递参数

 这一块是真的坑,需要注意一下!!!!

1、下载uni sdk

下载uni sdk的路径,需要将这个文件下载到项目中,我是命名为uni.webview.js,并放在static文件夹下

1 <script src="https://gitee.com/dcloud/uni-app/raw/dev/dist/uni.webview.1.5.3.js"></script>

2、修改uni.webview.js文件

默认自带的方法名为uni,会和本地的uni命名冲突。会报uni.postMessage不是一个function

我改成了webUni。注意修改的地方有三处(我之前只改了一处,结果一直整不出来)

 

 

3、修改index.html文件

在public下的index.html文件中添加如下代码,注意要放在<body></body>后面

 1     <script type="text/javascript">
 2         var userAgent = navigator.userAgent;
 3         if (userAgent.indexOf('AlipayClient') > -1) {
 4             // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。
 5             document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
 6         } else if (/QQ/i.test(userAgent) && /miniProgram/i.test(userAgent)) {
 7             // QQ 小程序
 8             document.write(
 9                 '<script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script>'
10             );
11         } else if (/miniProgram/i.test(userAgent) && /micromessenger/i.test(userAgent)) {
12             // 微信小程序 JS-SDK 如果不需要兼容微信小程序,则无需引用此 JS 文件。
13             document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>');
14         } else if (/toutiaomicroapp/i.test(userAgent)) {
15             // 头条小程序 JS-SDK 如果不需要兼容头条小程序,则无需引用此 JS 文件。
16             document.write(
17                 '<script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script>');
18         } else if (/swan/i.test(userAgent)) {
19             // 百度小程序 JS-SDK 如果不需要兼容百度小程序,则无需引用此 JS 文件。
20             document.write(
21                 '<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script>'
22             );
23         } else if (/quickapp/i.test(userAgent)) {
24             // quickapp
25             document.write('<script type="text/javascript" src="https://quickapp/jssdk.webview.min.js"><\/script>');
26         }
27     </script>
28 
29     <!--上面的都是copy uni-app web-view组件官方的案例,懒得再去删减修改了 -->
30 
31     <!-- uni 的 SDK -->
32     <script type="text/javascript" src="<%= BASE_URL %>static/uni.webview.js"></script>
33     <script type="text/javascript">
34         // 待触发 `UniAppJSBridgeReady` 事件后,即可调用 uni 的 API。
35         document.addEventListener('UniAppJSBridgeReady', function() {
36             webUni.getEnv(function(res) {
37                 console.log('当前环境:' + JSON.stringify(res));
38             });
39         });
40     </script>

4、使用uni.webview的方法

使用webUni.postMessage()发送消息,可以通过点击事件向小程序发送消息,还可以使用方法跳转到小程序

 1             changeSchoolHandle() {
 2             //如果想要点击按钮后,小程序退出H5页面,那么就在postMessage前进行路由跳转,具体支持的路由跳转方法,可以查看官方文档,
 3                     webUni.reLaunch({
 4                         url: '/pages/school/school'
 5                     })
 6                     webUni.postMessage({
 7                         data: {
 8                             type: 'backSchool'
 9                         }
10                     })
11             },
1 //webView中使用@message对消息进行处理
2 <web-view :src="src" @message="handleMessage"></web-view>

注意:

1、postMessage() 里,数据要放在 data 对象里

2、注意触发的时机,只有 后退、组件销毁、分享 的时候,才会触发 web-view 的message事件

3、使用uni的 方法,要改uni.webview.js里的 uni 对象。此处我改为了webUni

标签:uniapp,school,qs,程序,通信,H5,userAgent,uni,JS
From: https://www.cnblogs.com/jolin-qin/p/17879636.html

相关文章

  • React 组件通信方式
    人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后的奖杯。1.父子组件通信方式1.1父组件传递到子组件直接通过属性进行传递,数据的传递可以提高组件的复用性。1.2子组件传递到父组件通过回调函数(callback)来实现。ref标......
  • 优化 uniapp 发行操作:一键打包、混淆代码
    ​ uniapp一键发行代码并混淆代码第一步.在项目根目录下安装插件npminstalljavascript-obfuscator-g  安装完成后,javascript-obfuscator就是一个独立的可执行命令了。javascript-obfuscator-v  第二步:HbuilderX点击发行按钮,打包代码到dist文件中小程序发行......
  • Vue3的手脚架使用和组件父子间通信-插槽(Options API)学习笔记
    VueCLI安装和使用全局安装最新vue3npminstall@vue/cli-g升级VueCLI:如果是比较旧的版本,可以通过下面命令来升级npmupdate@vue/cli-g通过脚手架创建项目vuecreate01_product_demoVue3父子组件的通信父传子父组件<template><div><divclass="item"v-for="(item,in......
  • 32-SPI通信
    软件模拟的SPI和硬件实现SPI(SPI外设)SPI(串行外设接口)协议四根通信线:SCK(串行时钟线) MOSI(Masteroutputslaveinput)主机输出从机输入    MISO(主机输入从机输出)    SS(从机选择)有时也叫CS      MOSI和MISO有时也叫DO和DI同步,全双工 主机的波特率......
  • 浏览器跨 Tab 窗口通信原理
    目录浏览器跨Tab窗口通信原理BroadcastChannelSharedWorkerAPIlocalStorage/sessionStorage跨Tab窗口通信应用场景浏览器跨Tab窗口通信原理所谓多窗口下进行互相通信,是指在浏览器中,不同窗口(包括不同标签页、不同浏览器窗口甚至不同浏览器实例)之间进行数据传输和通信的......
  • 网络通信、UDP通信、TCP通信、BS架构模拟、URL了解
    网络编程可以让程序与网络上的其他设备中的程序进行数据交互所以,我们学习网络编程的主要目的就是为了实现网络通信网络通信网络通信基本模式常见的通信模式有如下2种形式:Client-Server(Cs)、Browser/Server(Bs)Client-Server(Cs)主要是客户端与服务端之间的联系(就是相应的App和后......
  • uniapp 微信小程序 onLaunch触发vuex 请求http报错600009?
    当在uniapp中的微信小程序中使用vuex触发http请求时,出现错误码600009通常表示网络请求发生了错误或失败。这个错误码通常不是uniapp或vuex特定的错误码,而是微信小程序的错误码。以下是一些可能导致此错误的原因和解决方法:网络连接问题:首先,确保您的设备已连接到互联网,并且网络连接稳......
  • golang的蓝牙通信库
    github.com/tinygo-org/bluetooth:TinyGo是一个Go语言编译器,它专注于微控制器和小型计算机系统。这个库是TinyGo项目的一部分,用于支持蓝牙低功耗(BLE)设备。github.com/go-ble/ble:这是一个轻量级的Golang库,旨在简化与蓝牙低功耗设备的交互。它支持多种平台,并提供了一种简单的A......
  • uniapp开发——创建安卓自定义调试基座,实现热更新调用原生功能
    一.生成本地包:选中项目,头部菜单栏“发行"-"生成本地打包App资源"打包成功二.打包完成,复制App资源包到安卓studio项目中uniapp项目根目录下,找到unpackage目录,打开resources目录,复制下边的_UNI_XXXXX格式的目录三.把App资源包粘贴到Androidstudio项目中,目录路径为:app-sr......
  • 学习记录-CAN通信配置
    CAN通信配置1、MCU时钟配置在MCU配置里面点击“+”进行添加时钟,这里我选择配置的CAN5通信口,时钟频率为2.4E7,可添加分频,更改时钟频率 2、Port-IO口配置在原理图中找到CAN5对应的IO口,在软甲中,直接勾选CAN口,做映射处理即可。 3、CAN配置点击“+”添加一个CAN口,我这里选择......