• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 浅析网页与小程序间怎么进行通信

浅析网页与小程序间怎么进行通信

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了网页与小程序通信等相关知识,希望对您有所帮助

网页与小程序间怎么进行通信?下面本篇文章给大家介绍一下关于网页与小程序通信的相关知识,希望对大家有所帮助!


浅析网页与小程序间怎么进行通信


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

小程序提供的功能

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

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

https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

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


网页

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


小程序

index.wxml

通过bindmessage绑定接收事件

<web-view bindmessage='getMessage' src='{{ src }}'></web-view>

index.js

// 获取从网页发送来的消息getMessage(e) {  const getMessage (e) {  // data是多次postMessage的参数组成的数组  const { data } = e.detail;  // 需要取最后一条数据  let shareMessage = 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方法只有特定场景可以获取消息,所以如果非特定场景怎么获取通信呢?


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

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

1、场景还原

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


浅析网页与小程序间怎么进行通信

浅析网页与小程序间怎么进行通信


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


2、解决方案

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

网页

// 保存城市信息const saveCityHandle = () => {  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);    }  },});

总结

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

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



分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2022-04-29Photoshop制作立体效果的金色艺术字
  • 2022-04-29实例讲解Laravel队列的简单使用
  • 2022-04-29Photoshop制作简洁时尚的形象主页
  • 2022-04-29一个设计师的PS经验技巧及设计心得
  • 2022-04-29VUE项目地址去掉 # 号的方法
  • 2022-04-29解决网站打开出现"SEC_ERROR_EXPIRED_CERTIFICATE"问题
  • 2022-04-29MAC环境配置定时任务
  • 2022-04-29dedecms大量删除文章后,列表页显示错误修复办法
  • 2022-04-29php构造方法和java构造方法有什么区别
  • 2022-04-29宝塔面板7.X高级破解版代码

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 忘记mysql密码了怎么办
    • 怎么在swarm集群里通过service部署wordpress
    • 介绍Laravel8路由模块新增missing方法
    • 浅析如何从小程序跳到H5页面/微信小程序跳转到H5页面实例解析
    • 解决Thinkphp5+部署到宝塔LNMP后404 NOT FOUND的问题
    • 关于ThinkPHP多表联合查询的常用方法
    • Photoshop打造漂亮的钻石艺术字体排字教程
    • 详解thinkphp ajaxfileupload异步上传图片
    • 实例详解thinkphp6搭建后端api接口
    • 让dede:flink拥有和dede:arclist一样使用limit标签

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有