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

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

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

前言

微信小程序提供了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.lryc.cn/news/517185.html

相关文章:

  • Android - NDK:编译可执行程序在android设备上运行
  • 快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
  • shell技能树-扩展变量
  • 基于RedHat9部署WordPress+WooCommerce架设购物网站
  • LabVIEW瞬变电磁接收系统
  • Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
  • Linux系统扩容根 (/) 文件系统空间
  • JavaScript之JQuery
  • JAVA学习记录2
  • 计算机网络、嵌入式等常见问题简答
  • 中华人民共和国预算法实施条例
  • 【养生--果蔬汁】
  • LLM架构从基础到精通之词向量1
  • 【SQL】Delete使用
  • KBQA前沿技术
  • 跨年烟花C++代码
  • centos服务器 /1ib64/libm.so.6: version “GLIBc 2.27’ not found 异常
  • 职场:如何快速适应职场新环境?
  • axios的替代方案onion-middleware
  • 设计模式——泛型单例类
  • 三维卷积( 3D CNN)
  • 【JAVA】Java开发小游戏 - 简单的2D平台跳跃游戏 基本的2D平台跳跃游戏框架,适合初学者学习和理解Java游戏开发的基础概念
  • 分享3个国内使用正版GPT的网站【亲测有效!2025最新】
  • CSDN Markdown编辑器设置视频居中完美解决方案
  • Java到底是值传递还是引用传递????
  • 初学stm32 --- 电源监控
  • Win10本地部署大语言模型ChatGLM2-6B
  • [ LeetCode 75 ] 1768. 交替合并字符串
  • (三)通过WebGL绘制一个简单的三角形来理解渲染管线
  • 医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件