微信小程序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 。

属性说明

属性名类型说明平台差异说明
srcStringwebview 指向网页的链接
allowString用于为 iframe 指定其特征策略H5
sandboxString该属性对呈现在 iframe 框架中的内容启用一些额外的限制条件。H5
fullscreenBoolean是否铺满整个页面,默认值:trueH5 (HBuilder X 3.5.4+)
webview-stylesObjectwebview 的样式App-vue
update-titleBoolean是否自动更新当前页面标题。默认值:trueApp-vue (HBuilder X 3.3.8+)
@messageEventHandler网页向应用 postMessage 时,会在特定时机(后退、组件销毁、分享)触发并收到消息。H5 暂不支持(可以直接使用 window.postMessage)
@onPostMessageEventHandler网页向应用实时 postMessageApp-nvue
@loadEventHandler网页加载成功时候触发此事件。微信小程序、支付宝小程序、抖音小程序、QQ小程序
@errorEventHandler网页加载失败的时候触发此事件。微信小程序、支付宝小程序、抖音小程序、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.navigateTonavigateTo
uni.redirectToredirectTo
uni.reLaunchreLaunch
uni.switchTabswitchTab
uni.navigateBacknavigateBack
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 返回的对象

属性类型说明
plusBooleanApp
nvueBooleanApp-nvue, uni.webview.1.5.4.js+ 支持
miniprogramBoolean微信小程序
smartprogramBoolean百度小程序
miniprogramBoolean支付宝小程序

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 <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
  • 与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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/316842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从车规传感器发展的正反面,看智驾发展的“胜负手”

北京车展进程过半&#xff0c;雷军和周鸿祎成为车展新晋“网红”的同时&#xff0c;智能驾驶成为观众讨论最务实的话题之一。端到端自动驾驶、城市NOA这些炙手可热的话题&#xff0c;占据了大部分的关注度。 但在高阶智能驾驶之外&#xff0c;智能驾驶同样具有频繁使用需求的低…

记录wordpress网站搭建及当天被SEO优化收录

网站是前不久搭建的&#xff0c;但是一直没有做SEO优化&#xff0c;今天花了点时间做下优化。记录下&#xff0c;喜欢的朋友点赞收藏下。 1.wordpress后台下载插件Yoast SEO插件&#xff0c;setting中搜索XML sitemaps&#xff0c;点view the XML sitemap&#xff0c;暂时不关…

C++ 抽象机制

抽象机制 1. 虚函数 使用关键字virtual 声明的函数&#xff0c;意思是可能随后在其派生类中重新定义。 纯虚函数 在声明的末尾使用0 的函数&#xff0c;说明是纯虚函数。 抽象类 含有纯虚函数多的类称为抽象类(abstract class). 多态类型 如果一个类负责为其他一些类提供接…

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ②

DRQ的作用&#xff1a; DRQ负责调度管理pipeline里的node处理逻辑(通过node之间的dependency依赖机制) 利用多线程并行处理Pipeline中并行的node&#xff0c;加快处理速度 DRQ运转流程&#xff1a; DRQ先告诉node fill dependency&#xff0c; 此时seq id 为0…

RakSmart站群服务器租用注意事项科普

随着互联网的飞速发展&#xff0c;站群运营成为越来越多企业和个人的选择。而RakSmart作为知名的服务器提供商&#xff0c;其站群服务器租用服务备受关注。在租用RakSmart站群服务器时&#xff0c;源库建议有一些关键的注意事项需要特别留意&#xff0c;以确保服务器的稳定运行…

springboot 集成 flowable

随着企业对于业务流程管理需求的增加&#xff0c;流程引擎在企业信息化建设中的作用越来越重要。Flowable是一个开源的轻量级业务流程管理&#xff08;BPM&#xff09;和工作流引擎&#xff0c;它支持BPMN 2.0标准。 Flowable的一些特点&#xff1a; 安装集成&#xff1a;Flow…

记一次生产事故的排查和解决

一. 事故概述 春节期间, 生产系统多次出现假死不可用现象, 导致绝大部分业务无法进行. 主要表现现象为接口无法访问. 背景为900W客户表和近实时ES, 以及春节期间疫情导致的普通卖菜场景近似秒杀等. 二. 排查过程 优先排查了info, error, catalina日志, 发现以下异常: 主要的…

【漏洞复现】IP-guard WebServer 权限绕过漏洞

0x01 产品简介 IP-guard WebServer 是 IP-guard 网络安全管理系统的一部分,用于提供 Web 界面以进行用户权限管理、监控和审计。 0x02 漏洞概述 IP-guard WebServer的权限验证机制中存在设计缺陷,未授权的攻击者能够规避安全验证,通过后端接口执行文件的任意读取和删除操…

每天五分钟深度学习:导数是反向传播算法的数学基础

本文重点 导数作为微积分学的核心概念之一,不仅在数学领域内占有举足轻重的地位,更在实际问题中发挥着不可替代的作用。我们要想学习反现象传播算法,我们前提是先要学习导数的概念。本节课程我们将看一下导数是什么? 导数 导数,顾名思义,是函数在某一点或某一段区间内…

使用PyCharm开发工具创建工程

一. 简介 前面文章实现了开发 python程序使用的 开发工具PyCharm&#xff0c;本文来学习使用 PyCharm开发工具创建一个 python工程。 二. 使用PyCharm开发工具创建工程 1. 首先&#xff0c;打开 PyCharm开发工具&#xff0c;打开 "New project" 选项&#xff1a; …

opencv_23_高斯模糊

void ColorInvert::gaussian_blur(Mat& image) { Mat dst; GaussianBlur(image, dst, Size(0, 0), 15); // Size(2, 2), imshow("图像模糊2", dst); }

【AIGC调研系列】LLaVA++整合Phi-3和Llama-3能够实现什么

LLaVA能够为Phi-3和Llama-3带来的主要好处包括&#xff1a; 视觉处理能力的增强&#xff1a;通过整合Phi-3和Llama-3模型&#xff0c;创建了具备视觉处理能力的Phi-3-V和Llama-3-V版本&#xff0c;这意味着这些模型现在能够理解和生成与图像相关的内容[1]。这种能力的增加&…

Golang错误处理机制

文章目录 Golang错误处理机制panic异常recover捕获异常自定义错误 Golang错误处理机制 panic异常 panic异常 Go的类型系统会在编译时捕获很多错误&#xff0c;但有些错误只能在运行时检查&#xff0c;比如除零错误、数组访问越界、空指针引用等&#xff0c;这些运行时错误会引…

springboot-异步、定时、邮件任务

目录 一&#xff0c;前言 二&#xff0c;异步 2.1&#xff0c;案例&#xff1a; 1&#xff0c;首先创建一个service&#xff1a; 2&#xff0c;Controller: ① 想办法告诉spring我们的异步方法是异步的&#xff0c;所以要在方法上添加注解 Async ②去springboot主程序中开…

可以在手机端运行的大模型标杆:微软发布第三代Phi-3系列模型,评测结果超过同等参数规模水平,包含三个版本,最小38亿,最高140亿参数

本文原文来自DataLearnerAI官方网站&#xff1a; 可以在手机端运行的大模型标杆&#xff1a;微软发布第三代Phi-3系列模型&#xff0c;评测结果超过同等参数规模水平&#xff0c;包含三个版本&#xff0c;最小38亿&#xff0c;最高140亿参数 | 数据学习者官方网站(Datalearner…

CH4INRULZ-v1靶机练习实践报告

CH4INRULZ-v1靶机练习实践报告 1 安装靶机 靶机是.ova文件&#xff0c;需要用VirtualBox打开&#xff0c;但我习惯于使用VMWare,因此修改靶机文件&#xff0c;使其适用于VMWare打开。 解压ova文件&#xff0c;得到.ovf文件和.vmdk文件。直接用VMWare打开.ovf文件即可。 2 夺…

【Unity动画系统】Animator组件的属性

介绍Animator组件的全部属性 Controller&#xff1a;动画控制器 Avatar&#xff1a;人物骨骼 Apply Root Motion&#xff1a;有一些动画片段自带位移&#xff0c;如果希望自带的位移应用在游戏对象上&#xff0c;那么就勾选&#xff1b;如果自己编写脚本&#xff0c;那么就不…

Xcode 15构建问题

构建时出现的异常&#xff1a; 解决方式&#xff1a; 将ENABLE_USER_SCRIPT_SANDBOXING设为“no”即可&#xff01;

stm32 hid自定义接收发送程序开发过程记录

cubleMX配置如下 修改端点描述符一次传输的数据大小 根据cubelMX标准在这里修改 编译错误 直接修改&#xff08;因为没有使用nodef &#xff09;编译通过 修改报告描述符&#xff08;默认的描述符无法传输数据&#xff09; 参考&#xff1a;USB协议详解第10讲&#xff08;USB描…

Web 渗透测试神器:HackBar 保姆级教程

一、介绍 HackBar 是一个用于浏览器的扩展插件&#xff0c;主要用于进行网络渗透测试和安全评估。它提供了一系列方便的工具和功能&#xff0c;可以帮助用户执行各种网络攻击和测试&#xff0c;包括 XSS、SQL 注入、CSRF、路径穿越等。以下是 HackBar 插件的一些主要特点和功能…