「小程序开发」关于网页与小程序的通信

简介: 用技术实现梦想,用梦想打开前端技术之门。分享我在小程序开发中,总结的关于网页与小程序的通信的解决方案。

前言

我们的微信小程序采用的web-view的方式内嵌H5项目,从而减少开发量,在实际只用中会遇到网页与小程序通信的功能需要,下面我简单总结了我遇到的问题以及解决方案。


小程序提供的功能

微信提供了网页向小程序发送消息的方法:wx.miniProgram.postMessage,该方法向小程序发送消息,会在特定时机(小程序后退、组件销毁、分享)触发组件的message事件。

具体API详情可以查看微信开放文档

简单介绍一下如果使用,以分享为例,如果页面A需要特别设置分享内容,比如转发标题、缩略图等。可以再网页中设置好变量值,通过发送给小程序

网页

letshareData= {
path: '转发路径',
title: '自定义转发标题',
imageUrl: '缩略图url',
};
wx.miniProgram.postMessage({ data: JSON.stringify(shareData) });

小程序

index.wxml

通过bindmessage绑定接收事件

<web-viewbindmessage="getMessage"src="{{ src }}"></web-view>

index.js

// 获取从网页发送来的消息getMessage(e) {
constgetMessage (e) {
// data是多次postMessage的参数组成的数组const { data } =e.detail;
// 需要取最后一条数据letshareMessage=data[data.length-1];
this.shareMessage=JSON.parse(shareMessage);
};
// 设置分享onShareAppMessage(options) {
return {
title: this.shareMessage.title,
path:  this.shareMessage.path,
imageUrl: this.shareMessage.imageUrl,
  };
}


这样一次定制化分享功能就完成了,但是postMessage方法只有特定场景可以获取消息,所以如果非特定场景怎么获取通信呢?


一种简单的获取通信的方法

我提供的解决方案可能不是最优的也不是最通用的,但是如果遇到了问题时可以作为一个备选方案。

场景还原

我们的小程序中有城市定位,第一次进入小程序需要选择所在城市,选择城市之后会缓存到本地,之后再次进入小程序不再需要重选选择城市。功能如下截图

image.jpeg


选择城市之后会在首页右上角展示

image.jpeg

由于城市选择页面和首页都是通过web-view内嵌小程序的方式,所以显然在H5页面中进入缓存,在小程序中是无法获取到缓存信息的。


解决方案

解决方案很简单,我跟后端的同伴沟通后,拜托他提供给我一个接口,把城市id和用户信息关联起来,这样我就可以再用户进行小程序的时候获取用户上次选择的城市id,进而再小程序里面缓存处理,这样用户再次进入小程序的时候无需再次选择城市

网页

// 保存城市信息constsaveCityHandle= () => {
saveCity({
cityId: cityId,
userId: userId,
  }).then(() => {});
};


小程序

获取城市id之后通过wx.setStorageSync缓存下来,以便后续使用。

wx.login({
success(res) {
if (res.code) {
wx.request({
url: `${that.domain()}/getUserInfo`,
data: {
body: { jsCode: res.code },
        },
success(res) {
wx.setStorageSync('cityId', res.data.cityId);
        },
      });
    } else {
console.log('登录失败!'+res.errMsg);
    }
  },
});


总结

“温故而知新,可以为师矣。”

有时候回过头来看看某些知识点,也许就会有新的思路,与君共勉。

目录
相关文章
|
1天前
|
设计模式 小程序 API
小程序之页面通信&派发通知
小程序之页面通信&派发通知
|
7月前
|
小程序 安全 网络安全
申请免费 SSL 证书为您的小程序加密通信
申请免费 SSL 证书为您的小程序加密通信
145 0
|
1天前
|
小程序 开发工具 Android开发
微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门(二)
微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门(二)
|
1天前
|
小程序 JavaScript 开发工具
微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门(一)
微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门(一)
|
1天前
|
JSON 小程序 JavaScript
【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)
【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)
|
1天前
|
JSON 小程序 JavaScript
【微信小程序】-- 宿主环境 & 通信模型 & 运行机制介绍(五)
【微信小程序】-- 宿主环境 & 通信模型 & 运行机制介绍(五)
|
1天前
|
编解码 小程序 算法
短剧系统开发(网页版/APP/小程序)丨短剧系统开发运营版及源码出售
短剧系统开发功能旨在为用户提供观看、分享和交流短剧作品的平台,涉及多种功能和特性,
|
1天前
|
移动开发 负载均衡 小程序
代驾app开发丨代驾系统开发玩法详情丨代驾系统开发网页版/H5/小程序及源码部署
**司机/代驾员端**:司机可以通过APP接收订单,查看订单详情、路线和导航,提供现场服务并进行确认。
|
1天前
|
小程序 JavaScript
钉钉小程序嵌入的vue页面怎么与钉钉小程序通信
在vue中使用官方提供的<script>标签无法引入https://appx/web-view.min.js,求大佬指教
|
1天前
|
小程序 前端开发 容器
(详细,及遇到的问题)将html网页小程序变成灰色
(详细,及遇到的问题)将html网页小程序变成灰色
77 0

热门文章

最新文章