微信小程序webview和小程序通讯
1.背景介绍
1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互
1.2开发工具:uniapp开发小程序
1.3原型图
功能:.点击体验官带看跳转小程序的体验官带看页面

功能:点击立即咨询唤起小程序弹窗打电话

2.组件及api介绍
uniapp官网:web-view | uni-app官网 (dcloud.net.cn)
web-view
web-view是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。
各小程序平台,web-view 加载的 url 需要在后台配置域名白名单,包括内部再次 iframe 内嵌的其他 url 。
属性说明
属性名
类型
说明
平台差异说明
src
String
webview 指向网页的链接
allow
String
用于为iframe指定其特征策略
H5
sandbox
String
该属性对呈现在iframe框架中的内容启用一些额外的限制条件。
H5
fullscreen
Boolean
是否铺满整个页面,默认值:true。
H5 (HBuilder X 3.5.4+)
webview-styles
Object
webview 的样式
App-vue
update-title
Boolean
是否自动更新当前页面标题。默认值:true
App-vue (HBuilder X 3.3.8+)
@message
EventHandler
网页向应用postMessage时,会在特定时机(后退、组件销毁、分享)触发并收到消息。
H5 暂不支持(可以直接使用window.postMessage)
@onPostMessage
EventHandler
网页向应用实时postMessage
App-nvue
@load
EventHandler
网页加载成功时候触发此事件。
微信小程序、支付宝小程序、抖音小程序、QQ小程序
@error
EventHandler
网页加载失败的时候触发此事件。
微信小程序、支付宝小程序、抖音小程序、QQ小程序
在小程序端,用法和iframe类似,直接在src赋值在线地址
<web-view src="https://uniapp.dcloud.io/static/web-view.html"></web-view>
注意:
- 小程序仅支持加载网络网页,不支持本地html
- 小程序端 web-view 组件一定有原生导航栏,下面一定是全屏的 web-view 组件,navigationStyle: custom 对 web-view 组件无效。
- 小程序平台,
src指向的链接需登录小程序管理后台配置域名白名单。 - 小程序平台,个人类型与海外类型的小程序使用
web-view组件,提交审核时注意微信等平台是否允许使用 - 小程序的web-view使用的是小程序自带的浏览器内核,不同厂商不一样,详见
- 各小程序平台,web-view 加载的 url 需要在后台配置域名白名单,包括内部再次 iframe 内嵌的其他 url 。
<web-view>加载的网页中支持调用部分 uni 接口:
方法名
说明
平台差异说明
uni.navigateTo
navigateTo
uni.redirectTo
redirectTo
uni.reLaunch
reLaunch
uni.switchTab
switchTab
uni.navigateBack
navigateBack
uni.postMessage
向应用发送消息
抖音小程序不支持、H5 暂不支持(可以直接使用window.postMessage)
uni.getEnv
获取当前环境
抖音小程序与飞书小程序不支持
uni.postMessage(OBJECT)
网页向应用发送消息,在<web-view>的message事件回调event.detail.data中接收消息。
Tips
- 传递的消息信息,必须写在 data 对象中。
event.detail.data中的数据,以数组的形式接收每次 post 的消息。(注:支付宝小程序除外,支付宝小程序中以对象形式接受)
#uni.getEnv(CALLBACK)
callback 返回的对象
属性
类型
说明
plus
Boolean
App
nvue
Boolean
App-nvue, uni.webview.1.5.4.js+ 支持
miniprogram
Boolean
微信小程序
smartprogram
Boolean
百度小程序
miniprogram
Boolean
支付宝小程序
3.实际操作
下面直接来看示例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>测试</title><!-- 引入ui库vant的样式 --><link rel="stylesheet" href="./vant.css"><!-- 引入自定义的全局样式 --><link rel="stylesheet" href="./global.css"><!-- 引入页面样式文件 --><link rel="stylesheet" href="./index.css"></head><body><div id="app"><div class="flex-1"><!-- 嵌入iframe展示vr页面 --><iframe class="iframe" src="https://www.realsee.com/website/customer/dataSpace/vr/kPJJK5rx" allowfullscreen="true"frameborder="0"></iframe></div><main><!-- 底部操作按钮 --><div class="ptb-10 flex-vcenter flex-between"><van-button type="info" @click="handleLook">体验馆带看</van-button><van-button type="info" @click="handleRoom">看房型</van-button><van-button type="info" @click="handleAsk">立即咨询</van-button></div><!-- 看房型的弹窗 --><van-popup v-model="showRoomPopup" round position="bottom" :overlay="false":style="{ minHeight: '10%',padding: '15px 10px 10px',background: 'rgba(0,0,0,.7)' }"><div class="co-white pb-15" style="position: relative;"><p class="text-center">房型预览</p><div @click="showRoomPopup = false" class="arrow-down-wrap flex-vcenter"><span class="fs-12 mr-5">收起</span><van-icon name="arrow-down" /></div></div><van-grid class="rooms-wrap" :column-num="3"><van-grid-item v-for="(item,index) in urlParams.rooms" :key="index"><div class="co-white rooms-item" @click="goRoom(item.url)"><p class="rooms-content">{{item.name}}</p><van-image width="100%" height="100%" fit="cover" src="https://img01.yzcdn.cn/vant/cat.jpeg" /></div></van-grid-item></van-grid></van-popup></main></div><!-- 需要引入的文件 --><!-- vue --><script type="text/javascript" src="./vue.min.js"></script><!-- vant ui库 --><script type="text/javascript" src="./vant.min.js"></script><!-- 微信小程序 JS-SDK --><script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script><!-- 与uniapp建立连接 --><script type="text/javascript" src="./uni.webview.1.5.5.js"></script><!-- 页面的js文件 --><script type="text/javascript" src="./index.js"></script>
</body></html>
- 因为使用的vantUi库,所以下载了vant.min.js,想用vue开发所以下载了vue.min.js,这2个不重要
- 需要引入微信小程序 JS-SDK
- 与uniapp建立连接,引入hellouniapp.dcloud.net.cn/hybrid/html/uni.webview.1.5.5.js,可以下载到本地
调用api与小程序通信
new Vue({el: '#app',components: {},data () {return {urlParams: {rooms: []},showRoomPopup: false}},computed: {},created () {},watch: {},mounted () {const { params } = this.urlToObj(location.href)if (params) {this.urlParams = JSON.parse(decodeURI(params))}document.addEventListener('UniAppJSBridgeReady', () => {uni.getEnv((res) => {console.log('当前环境:' + JSON.stringify(res));});})},methods: {// url参数转对象urlToObj (url) {let obj = {};if (url.indexOf('?') >= 0) {let str = url.slice(url.indexOf('?') + 1);let arr = str.split('&');console.log(str, arr)for (let j = arr.length, i = 0; i < j; i++) {let arr_temp = arr[i].split('=');obj[arr_temp[0]] = arr_temp[1];}}return obj;},// 点击体验官带看handleLook () {// 跳转到小程序的某个页面uni.navigateTo({url: '/pages/vr/look'});},// 点击看房型handleRoom () {console.log(this.urlParams)this.showRoomPopup = true;},goRoom (url) {// 跳转到小程序的某个页面uni.navigateTo({url: `/pages/vr/room?url=${url}`});},// 点击咨询handleAsk () {// 发送消息给小程序uni.postMessage({data: {action: '咨询'}});// 因为网页向应用?postMessage?时,会在特定时机(后退、组件销毁、分享)触发并收到消息。 所以用uni.redirectTo触发小程序的重新加载实时接收消息uni.redirectTo({url: '/pages/vr/vr'});}}
})
页面预览效果:

小提示:如何在开发者工具查看webiew页面的信息

小程序端代码参考
<template><web-view :src="vrUrl" @message="onMessage"></web-view>
</template><script>
import { callPhone } from '@/utils';
export default {data() {return {vrUrl:// 这里要换成你的在线网页地址,我这里写的是本地的`http://127.0.0.1:5500/vr-demo/index.html?params=` +encodeURI(JSON.stringify({rooms: [{name: '房间1',url: 'https://www.realsee.com/website/customer/dataSpace/vr/kPJJK5rx',},{name: '房间2',url: 'https://www.realsee.com/website/customer/dataSpace/vr/kPJJK5rx',},],})),};},onLoad(props) {console.log(props);},methods: {// 接收webview传来的消息onMessage(e) {const { data } = e.detail;console.log(data,'web-view传来的信息,在小程序后退、组件销毁、分享会触发');console.log(data.at(-1));if (data?.at(-1)?.action === '咨询') {callPhone('18205236589');}},},
};
</script>
相关文章:
微信小程序webview和小程序通讯
1.背景介绍 1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互 1.2开发工具:uniapp开发小程序 1.3原型图 功能:.点击体验官带看跳转小程序的体验官带看页面 功能:点击立即咨询唤起小程序弹窗打电话 2.…...
ChatGPT大模型 创作高质量文案的使用教程和案例
引言 随着人工智能技术的飞速发展,大语言模型如 ChatGPT 在创作文案、生成内容方面展现出了强大的能力。无论是个人用户还是企业用户,都可以利用 ChatGPT 提高工作效率、激发创意、甚至解决实际问题。本文将详细介绍 ChatGPT 如何帮助创作各类高质量文案,并通过具体案例展示…...
Vue Web开发(八)
1. VueWeb面包屑和tag的布局 本章节完成VueWeb面包屑和tag的布局,并且与左侧菜单联系,涉及组件间通信。 1.1. 页面创建 (1)首先我们先完成每个页面的路由,之前已经有home页面和user页面,缺少mail页面和其…...
element-ui实现table表格的嵌套(table表格嵌套)功能实现
最近在做电商类型的官网,希望实现的布局如下:有表头和表身,所以我首先想到的就是table表格组件。 表格组件中常见的就是:标题和内容一一对应: 像效果图中的效果,只用基础的表格布局是不行的,因…...
【考前预习】4.计算机网络—网络层
往期推荐 【考前预习】3.计算机网络—数据链路层-CSDN博客 【考前预习】2.计算机网络—物理层-CSDN博客 【考前预习】1.计算机网络概述-CSDN博客 目录 1.网络层概述 2.网络层提供的两种服务 3.分类编址的IPV4 4.无分类编址的IPV4—CIDR 5.IPV4地址应用规划 5.1使用定长子…...
【java】MDC
目录 1. 说明2. 作用3. 使用4. 与TraceID的关系5. 注意事项 1. 说明 1.MDC(Mapped Diagnostic Context)是一个用于在多线程环境中追踪和传递日志上下文信息的机制。2.映射诊断环境。3.MDC是一个线程本地的、可维护的、可传递的上下文环境。4.它允许开发…...
Android 好的开源库
1. 权限请求框架 GitHub - getActivity/XXPermissions: Android 权限请求框架,已适配 Android 14 2. 下载框架 GitHub - lingochamp/okdownload: A Reliable, Flexible, Fast and Powerful download engine....
Go 语言结构
Go 语言结构 Go 语言,也称为 Golang,是一种由 Google 开发和支持的静态类型、编译型编程语言。它于 2009 年首次发布,旨在提高多核处理器、网络资源和大型代码库的性能。Go 语言以其简洁的语法、并发支持和强大的标准库而闻名,特别适合构建高性能的网络服务和分布式系统。…...
【漆学军】MT5几个重要类库的使用例子
MT5编程,有两种方式,一种是函数式编程,一种是面向对象编程。 面向对象编程,会让我们编写代码变得非常简单。 面向对象编程,主要是要熟悉4个类库。 #include <Trade\PositionInfo.mqh> #include <Trade\Tra…...
在 Ubuntu 24.04.1 LTS (WSL) 中使用 openssl 生成 keybox.xml
看到“生成 keybox.xml”,大概率都会联想到 PIF 和 Tricky Store。这里就不多解释它们的用途了。最近在网上看到生成非 AOSP keybox 的教程,在这里做一些补充,并将代码打包成一个 Python 脚本。 参考自: Idea 提供者:…...
【JavaSE基础】第十六章:IO流
一、理解 1.简单而言:流就是内存与存储设备之间传输数据的通道、管道。 2.流的分类: (1) 按方向 ( 以 JVM 虚拟机为参照物 ) 【重点】 输入流:将< 存储设备 > 中的内容读入到 < 内存 > 中。 输…...
常见漏洞—SSRF_FastCGI
FastCGI协议 简介 Fast CGI源自旧版本的CGI 路由/结构图 # 访问url --> 浏览器生成HTTP请求报文 --> web server解析请求(例如nginx) web server 是内容的分发者 当访问静态页面时,web server 会直接返回资源,例如index.htm…...
LeetCode 283.移动零(超简单讲解)
283.移动零 题目示例示例1示例2 解题思路快慢指针实现设计 详细代码 题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 示例1 …...
GIS原理及应用、地理坐标系与投影坐标系
文章目录 一、GIS定义1.1 地理信息系统1.2 建模1.3 相关教程1.4 GIS前沿方向 二、GIS数据格式2.1 矢量2.2 栅格2.3 矢量与栅格的区别 三、GIS数据组织3.1 抽象3.2 分层3.3 栅格与切片 四、坐标系4.1 坐标系简介4.2 大地坐标系GCS4.3 投影坐标系PCS4.4 投影变换 五、空间数据库与…...
用github镜像加速, --recursive还是去github站怎么处理?
小伙伴们大多碰到过github抽风的情况,时通时断,时快时慢,非常考验心情。 以前碰到连不上的时候,我大多就是在gitee和gitcode网站找一下镜像,找到后直接git clone 新地址即可。但是碰到 --recursive的时候就不行了&…...
ctfshow-web 151-170-文件上传
151. 我们首先想到就是上传一句话木马。但是看源代码限制了png。 (1)改前端代码。 这里是前端限制了上传文件类型,那我们就改一下就好了嘛,改成php。 这里直接修改不行,给大家推荐一篇简短文章,大家就会了(…...
【电源专题】开关转换器使能(EN)管脚的几种不同方式
我们的文章说到了很多与使能有关的电源案例和原理,如下所示: 【电源专题】案例:芯片规格书使能定义高电平最小阈值1.4V,那真的是到1.4V时才开始输出?_芯片的电流阀值-CSDN博客...
5G学习笔记之SNPN系列之ID和广播消息
目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…...
Qt-Advanced-Docking-System配置及使用、心得
Qt-Advanced-Docking-System 1. Qt-Advanced-Docking-System描述2. 功能特点2.1. 灵活的停靠方式2.2. 嵌套停靠2.3. 自定义布局保存与恢复2.4. 外观和行为定制 3. 与Qt原生停靠系统的比较4. 使用场景4.1. 集成开发环境(IDE)4.2. 图形设计软件4.3. 数据分…...
【Bolt.new + PromptCoder】三分钟还原油管主页
【Bolt.new PromptCoder】三分钟还原油管主页 PromptCoder官网:PromptCoder Bolt官网:https://bolt.new/ Bolt 是什么? Bolt.new 是一个提供创建全栈网络应用服务的平台。它允许用户通过提示(Prompt)、运行&#x…...
投资分析太复杂?用TradingAgents-CN实现零代码智能分析的3个方案
投资分析太复杂?用TradingAgents-CN实现零代码智能分析的3个方案 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN TradingAgents-CN作…...
GLM-4v-9b效果展示:直播带货截图→话术分析+转化点提炼
GLM-4v-9b效果展示:直播带货截图→话术分析转化点提炼 1. 模型能力概览 GLM-4v-9b是智谱AI在2024年开源的多模态视觉-语言模型,拥有90亿参数。这个模型最大的特点是能够同时理解图片和文字,支持中英文多轮对话,在11201120高分辨…...
电商评论分析利器:GTE文本向量实战情感分析与产品问题挖掘
电商评论分析利器:GTE文本向量实战情感分析与产品问题挖掘 1. 电商评论分析的痛点与解决方案 电商平台每天产生海量用户评论,这些评论蕴含着消费者真实的产品体验和市场反馈。传统的人工分析方法面临三大挑战: 处理效率低:人工…...
GitHub开源项目日报 · 2026年3月30日 · 微软开源VibeVoice语音模型登顶,Claude Code生态项目持续火爆
本期榜单涵盖了语音AI、Claude Code辅助编程工具、换脸技术、金融数据平台、在线教育、数据可视化等多个领域的开源项目。超过10000星以上的项目有9个,其中freeCodeCamp以近44万星稳居榜首,Apache Superset、OpenBB、Deep-Live-Cam等项目也获得广泛关注。微软开源的VibeVoice…...
SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑
SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑 你是不是经常遇到这样的烦恼?录了一段视频,或者拿到一段会议录音,想要给它配上精准的字幕,却发现自己要花几个小时去听写、校对、打时间轴?…...
解密网页资源批量下载:ResourcesSaverExt实战配置指南
解密网页资源批量下载:ResourcesSaverExt实战配置指南 【免费下载链接】ResourcesSaverExt Chrome Extension for one click downloading all resources files and keeping folder structures. 项目地址: https://gitcode.com/gh_mirrors/re/ResourcesSaverExt …...
Boomer:轻量高效的Linux屏幕放大镜工具
Boomer:轻量高效的Linux屏幕放大镜工具 【免费下载链接】boomer Zoomer application for Linux 项目地址: https://gitcode.com/gh_mirrors/boo/boomer 当你需要精准查看屏幕细节时是否常感到操作繁琐?无论是设计工作中的像素级调整、编程时的代码…...
FPGA新手入门:用Verilog手搓一个交通灯控制器(附完整代码与仿真)
FPGA实战:从零构建智能交通灯控制系统的Verilog全流程指南 引言 第一次接触FPGA开发时,我被硬件描述语言的独特思维方式所吸引。与软件编程不同,Verilog让我们能够直接描述硬件电路的行为。交通灯控制系统作为数字电路设计的经典案例…...
巴旦木脱青皮的设计【solidworks三维、cad图纸、论文、答辩稿】
巴旦木脱青皮设计是农产品加工领域的关键环节,其核心作用在于通过机械结构与工艺参数的协同优化,实现青皮与果仁的高效分离,同时避免果仁损伤。该设计需综合考虑物料特性、动力传递效率及设备稳定性,通过三维建模与二维图纸的精准…...
告别盲目复位!用KEIL5的.axf文件实现“热插拔”调试,保留MCU内存状态全记录
深入解析KEIL5调试黑科技:如何通过.axf文件实现MCU内存状态无损调试 调试嵌入式系统时,最令人沮丧的莫过于遇到偶发故障却无法复现现场。传统调试方式往往需要复位MCU,导致宝贵的运行时状态信息瞬间消失。这种"盲人摸象"式的调试体…...
