当前位置: 首页 > article >正文

小程序与内嵌网页的数据通信

小程序与内嵌网页的数据通信

前言

微信小程序提供了web-view组件,允许开发者在小程序中嵌入网页。然而,由于小程序和网页运行在不同的环境中,它们之间的通信就需要依赖特定的机制来实现。然而我们日常的需求中,很多的时候都涉及到小程序内嵌网页和小程序之间进行数据通信的情况。这篇文章是我自己总结的微信小程序与内嵌web-view中网页通信的一些方法。

小程序向内嵌网页传递数据

通过修改web-view的src属性:可以在src中附加参数,然后在网页中解析这些参数(这种方式的操作类似于在网页中嵌入 iframe)。例如

<web-view src="{{url}}"></web-view>

url: https://www.a.com?id=123&name=456

或者在小程序中设置url时,可以附加参数:

this.setData({
  url: `${this.data.url}?param=value`
});

网页向小程序传递数据

使用wx.miniProgram.postMessage:在H5页面中,可以使用wx.miniProgram.postMessage向小程序发送消息。例如:

wx.miniProgram.postMessage({
  data: { message: 'Hello from H5' }
});

在小程序中,需要在web-view组件上绑定bindmessage事件来接收消息:

<web-view bindmessage="getMessage"></web-view>

小程序的JavaScript中处理消息:

Page({
  getMessage(e) {
    console.log(e.detail.data); // 获取到的消息数组
  }
});

注意,消息只有在特定时机(如小程序后退、组件销毁、分享等)才会被触发。比如说:

  1. H5刷新本页:wx.miniProgram.redirectTo
  2. H5 页面跳转:wx.miniProgram.navigateTo
  3. H5回退页面:wx.miniProgram.navigateBack

如果不加这些具体的操作,我们在微信开发者工具端会收到这样的一个信息

invokeAppService postMessage {message: "Hello from H5"} 2

并没有收到相对应的message事件打印的内容,然后我们修改代码:

wx.miniProgram.postMessage({
  data: { message: 'Hello from H5' }
});
wx.miniProgram.navigateBack();

不出意外的话会得到我们想要的结果,但是有些时候还是会出意外?就是当我们添加了当前带 web-view 的页面为编译页面的时候,使用了 wx.miniProgram.navigateBack();依旧会的得到invokeAppService postMessage {message: "Hello from H5"} 2这样的结果。

我们只需要略微调整即可:

const $button = document.getElementById('btn')
$button.addEventListener('click', () => {
  wx.miniProgram.postMessage({
    data: { message: 'Hello from H5' }
  });
  wx.miniProgram.redirectTo({
    url: '/pages/Test/WorkWebView/WorkWebView'
  })
})

或者移除编译选项也是能够得到我们想要的结果的。


http://www.kler.cn/a/488091.html

相关文章:

  • 消息中间件类型介绍
  • MMDetection框架下的常见目标检测与分割模型综述与实践指南
  • Linux 下信号的保存和处理
  • vs2022开发.net窗体应用开发环境安装配置以及程序发布详细教程
  • PLC实现HTTP协议JSON格式数据上报对接的参数配置说明
  • 开源 vGPU 方案 HAMi 解析
  • 数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall
  • docker 安装 fastdfs
  • hive迁移后修复分区慢,怎么办?
  • 学前端 4 个月想进中厂,该怎么做?
  • Shader->LinearGradient线性渐变着色器详解
  • 如何提升scrapy的效率
  • 理解 Tomcat 架构
  • SpringBoot多数据源架构实现
  • RocketMQ 和 Kafka 有什么区别?
  • 【Maui】导航栏样式调整
  • LLaMA-Factory web微调大模型并导出大模型
  • 计算机网络基础——网络协议
  • 科大讯飞Java面试题及参考答案 (120道-上)
  • MySQL8 使用 ProxySQL 来实现 MySQL 主从同步的读写分离和负载均衡
  • 一分钟了解git全局配置
  • 03_Redis基本操作
  • CTF随题思路—MiscMeowMeowMeow
  • 【广西乡镇界】arcgis格式shp数据乡镇名称和编码2020年内容测评
  • Attention系列笔记
  • JAVA2-类与对象编程(1)