uniapp web-view组件双向通信

news2024/11/17 21:24:46

前言

本文主要介绍在uniapp中页面与webview组件内页面的双向通信问题。

准备

uniapp项目

 调用webview组件

<web-view src="/hybrid/html/index.html"></web-view>

Web项目

项目目录

在uniapp项目根目录下新建hybrid/html目录,web项目文件放在hybrid/html目录下,否则web-view无法调用项目文件。

引入官方库

在web项目中引入官方库uni.webview.js,可以从uniapp官方示例库中下载,下载后放入web项目目录下即可,本文放在js文件夹中,然后在web项目页面中引入。

<script type="text/javascript" src="js/uni.webview.1.5.2.js"></script>

通信

uniapp传webview

接收消息(webview)

uniapp发送消息实际上就是调用webview组件内页面方法实现通信,所以我们需要现在webview组件内页面index.html中定义一个接收消息的方法:

function webReceiveData (data) {
    var parseData = JSON.parse(data)
	document.getElementById('msg').innerText = `接收到的消息:${parseData.msg}`
}

发送消息(uniapp)

要向webview中传递消息,首先需要获取到当前页面中的webview组件,然后调用webview页面中定义的接收方法就好;如下代码,获取到当前页面中的webview保存在wv中,并在获取成功后调用sendData方法向webview发送消息,在sendData方法中实现了webview组件内方法的调用。

onLoad() {
	let that = this;
	// #ifdef APP-PLUS
	var currentWebview = that.$scope.$getAppWebview();
	let num = 0;
	let wv_time = setInterval(function() {
		num++;
		that.wv = currentWebview.children()[0];
		if (that.wv) {
			// 获取到当前页面的webview子页面然后下发消息
			that.sendData({
				type: 'init',
				msg: 'addd'
			})
			clearInterval(wv_time)
		}
	}, 100);
	// #endif
},
methods: {
	sendData (data) {
		let that = this
		that.wv.evalJS("webReceiveData('" + JSON.stringify(data) + "')");
	},
}

webview传uniapp

接收消息(uniapp)

在uniapp中为web-view组件添加上@message事件

<web-view src="/hybrid/html/index.html" @message="receiveData"></web-view>

处理@message事件的方法receiveData方法

receiveData (data) {
    console.log("收到来自webview的消息:", data.detail)
}

发送消息(webview)

在webview页面中调用uni.postMessage 方法实现消息发送。

function webSendData () {
	document.getElementById('send').innerText = `已发送的消息:啊对对对`
	uni.postMessage({
		data: {
			msg: '啊对对对'
		}
	});
}

完整代码

uniapp端

<template>
	<view class="content">
		<web-view src="/hybrid/html/index.html" @message="receiveData"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				wv: null,
			}
		},
		onLoad() {
			let that = this;
			// #ifdef APP-PLUS
			var currentWebview = that.$scope.$getAppWebview();
			let num = 0;
			let wv_time = setInterval(function() {
				num++;
				that.wv = currentWebview.children()[0];
				if (that.wv) {
					// 获取到当前页面的webview子页面然后下发消息
					that.sendData({
						type: 'init',
						msg: 'addd'
					})
					clearInterval(wv_time)
				}
			}, 100);
			// #endif
		},
		methods: {
			sendData (data) {
				let that = this
				that.wv.evalJS("webReceiveData('" + JSON.stringify(data) + "')");
			},
			receiveData (data) {
				console.log("收到来自webview的消息:", data)
			},
		}
	}
</script>

<style>
	
</style>

Web端

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>通信实例</title>
	<style type="text/css">
		.container {
			display: flex;
			flex-direction: column;
		}
		.content {
			text-align: center;
			margin: 15px 0;
		}
		#msg {
			font-size: 1.2rem;
			font-weight: bold;
			color: #ff7d00;
		}
		.text {
			text-align: center;
			color: #c5c8ce;
		}
		.btn-box {
			text-align: center;
			margin: 15px 0;
		}
		.btn-box button {
			width: 125px;
			height: 45px;
			font-size: 18px;
			color: white;
			background-color: #1989fa;
			border-color: #2b85e4;
			border-radius: 5px;
		}
		.btn-box button:active {
			background-color: #88c1fa;
			border-color: #5cadff;
		}
	</style>
</head>
<body>
	<div class="container" id="lauwen">
		<div class="content" id="msg"></div>
		<div class="content" id="send"></div>
		<div class="text">©https://blog.csdn.net/Douz_lungfish</div>
		<div class="btn-box">
			<button type="button" onclick="webSendData()">发送消息</button>
		</div>
	</div>
	<script type="text/javascript" src="js/uni.webview.1.5.2.js"></script>
	<script type="text/javascript">
		function webReceiveData (data) {
			var parseData = JSON.parse(data)
			document.getElementById('msg').innerText = `接收到的消息:${parseData.msg}`
		}
		
		function webSendData () {
			document.getElementById('send').innerText = `已发送的消息:啊对对对`
			uni.postMessage({
				data: {
					msg: '啊对对对'
				}
			});
		}
		
	</script>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言第二弹---C语言基本概念(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 C语言基本概念 1、字符串和\02、转义字符3、语句和语句分类3.1、空语句3.2、表达式语句3.3、函数调⽤语句3.4、复合语句3.5、控制语句 4、注释4.1、注释的两种形…

CSS常见元素类型 盒子模型

文章目录 常见元素类型块元素内联元素空元素修改元素类型测试元素类型 盒子模型标准文本流:外边距和内边距测试盒子模型 常见元素类型 块元素 常见块元素: div p h1~h6 ul li img 这些元素结束之后自带换行&#xff0c;一行只能存在一个元素&#xff0c;无法横向排列&#xf…

建筑类中级工程师职称证明业绩材料有哪些?

三、建筑类中级工程师职称造价类工程业绩材料 1.合同&#xff1a;证明项目合作关系的凭证。 2.预&#xff08;结&#xff09;算报告等(重点是体现封面有你的名字和执业印章等) 3.单位证明或任命书(本人在项目中的职务聘书) 4.工程获奖证明&#xff1a;项目获得市优的证书、省优…

RabbitMQ交换机(3)-Topic

1.Topic模式 RabbitMQ的Topic模式是一种基于主题的消息传递模式。它允许发送者向一个特定的主题&#xff08;topic&#xff09;发布消息&#xff0c;同时&#xff0c;订阅者也可以针对自己感兴趣的主题进行订阅。 在Topic模式中&#xff0c; 主题通过一个由单词和点号组成的字…

Python环境下基于优化时频分辨率的信号时频分析

时频分析方法使用时-频域联合分布描述时间序列信号的瞬态特征&#xff0c;并通过瞬时频率估计来表征信号的特征频率随时间变化的趋势&#xff0c;在时间序列信号处理中得到了广泛的应用。STFT 和WT等常用的时频分析方法时频分辨率较低&#xff0c;而且对于多分量时变信号的匹配…

【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC&#xff0c; 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…

ELK之Filebeat输出日志格式设置及输出字段过滤和修改

一、Filebeat输出日志格式设置 1.1 编辑vim filebeat.yml文件,修改输出格式设置 # output to console output.console:codec.format: string: %{[@timestamp]} %{[message]}pretty: true### 1.2 测试 执行 ./filebeat -e 可以看到/tmp/access.log(目前文件里只有140.77.188…

HCIP-7

IPV6: 为什么使用IPV6&#xff1a; V4地址数量不够V4使用NAT&#xff0c;破坏了端到端原则 IPV6的优点&#xff1a; 全球单播地址聚合性强&#xff08;IANA组织进行合理的分配&#xff09;多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1&#xff09;…

【概述版】悲剧先于解析:在大型语言模型的新时代,历史重演了

这篇论文探讨了大型语言模型&#xff08;LLM&#xff09;的成功对自然语言处理&#xff08;NLP&#xff09;领域的影响&#xff0c;并提出了在这一新时代中继续做出有意义贡献的方向。作者回顾了2005年机器翻译中大型语法模型的第一个时代&#xff0c;并从中汲取教训和经验。他…

【2024最新-python3小白零基础入门】No4.python控制语句学习

文章目录 1 选择结构1.1 if语句 2 循环结构2.1 while循环语句2.2 for循环语句2.3 break、continue、pass在循环中的用途 对于 Python 程序中的执行语句,默认是按照书写顺序依次执行的,这时称这样的语句是顺序结构的。但是,仅有顺序结构还是不够的,因为有时需要根据特定的情况,有…

Git教程学习:03 记录每次更新到仓库

文章目录 1 检查当前文件状态2 跟踪新文件3 暂存已修改的文件4 状态简览5 忽略文件6 查看已暂存和未暂存的修改7 提交更新8 跳过使用暂存区域9 移除文件10 移动文件 现在我们的机器上有了一个 真实项目 的 Git 仓库&#xff0c;并从这个仓库中检出了所有文件的 工作副本。 通常…

Asp.Net期末课程设计——教学大纲查询系统(C#)(mysql或sqlserver)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV1zQ4y157Kz/?vd_source5f425e0074a7f92921f53ab87712357b 源码&#xff1a;https://space.bilibili.co…

实验笔记之——基于TUM-RGBD数据集的SplaTAM测试

之前博客对SplaTAM进行了配置&#xff0c;并对其源码进行解读。 学习笔记之——3D Gaussian SLAM&#xff0c;SplaTAM配置&#xff08;Linux&#xff09;与源码解读-CSDN博客SplaTAM全称是《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》&#xff0c;…

服务器数据恢复—异常关机导致Linux服务器目录项被破坏数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌PowerEdge R730服务器PowerVault MD3200存储&#xff0c;划分若干lun&#xff0c;操作系统版本是centos7&#xff0c;EXT4文件系统。 服务器故障&分析&#xff1a; 服务器在运行过程中自动关机且无法启动&#xff0c;服务器管理员对服…

JS遍历对象的方法及特点

1、定义一个对象 let obj {name: Tom,age: 20,sex: 男,};obj.weight 70kg;// obj的原型上定义属性Object.prototype.height 180cm;Object.prototype.major function() {console.log(专业&#xff1a;计算机应用技术);};console.log(obj, obj); 控制台输出的obj中&#xff…

关于Windows 10的开始菜单的使用,看这篇文章就足够了

在Windows 10上,“开始”菜单是一个重要的组件,因为它是你每天用来查找应用程序、设置和文件的体验。 尽管多年来,开始菜单经历了许多转变,甚至一度从操作系统中删除,但这个版本将Windows 7的熟悉感与Windows 8.x的现代开始屏幕结合在一起。 开箱即用,开始菜单包括一个…

帕金森的危害你知道多少?

帕金森是中老年的人群的高发病&#xff0c;那么你知道帕金森的危害有多少吗&#xff1f;看了这篇文章你就知道了...... ①肢体静止时会不自觉手抖 帕金森病人早期最早出现的症状就是震颤&#xff0c;如果不加以干预&#xff0c;持续下去甚至会累及面部器官。最早期的震颤是不易…

锐浪报表 Grid++Report 表头重复打印

一、问题提出 锐浪报表 GridReport&#xff0c;打印表格时&#xff0c;有时需要重复打印表头&#xff0c;有时需要取消重复打印表头&#xff0c;实现连续打印数据明细。见下表&#xff1a; 首页&#xff1a; 后续页&#xff1a;&#xff08;无表头&#xff09; 按需要&#xf…

NVIDIA 大模型 RAG 分享笔记

文章目录 大语言模型在垂直领域落地的三个挑战&#xff1a;什么是 RAG以及为什么能解决大预言模型所带来的的这三个问题RAG 不是一项技术而是整体的 Pipeline非参数化 &#xff1a;数据库部分加载到数据库中检索阶段 提升检索效率的技术检索前&#xff1a;对query做处理use que…

FPGA引脚物理电平(内部资源,Select IO)-认知2

引脚电平 The SelectIO pins can be configured to various I/O standards, both single-ended and differential. • Single-ended I/O standards (e.g., LVCMOS, LVTTL, HSTL, PCI, and SSTL) • Differential I/O standards (e.g., LVDS, Mini_LVDS, RSDS, PPDS, BLVDS, and…