uni-app之webview通信实现方法示例

 更新时间:2025年07月17日 09:15:51   作者:Pearson  
UniApp凭借其跨平台开发的显著优势,成为众多开发者构建多端应用的首选框架,这篇文章主要介绍了uni-app之webview通信的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

1 背景

在uni-app开发中,常见的一种场景是主应用通过web-view组件加载子应用的H5页面。为便于描述,我们将主应用称为App,子应用称为H5站点。两者均采用uni-app+Vue技术栈:主应用通过HBuilderX云打包生成原生App(如Android的APK包),子应用则通过HBuilderX发布为H5站点。当主应用加载H5页面时,web-view会占据整个手机屏幕。此时,若需通过物理按键或H5页面的返回按钮返回主应用,则需实现应用间通信,由H5站点向主应用发送关闭web-view实例的请求。

2 技术方案

经过分析,我确定了两种可行的技术方案。第一种方案利用web-view组件的消息机制:子应用通过调用postMessage向主应用发送消息,主应用监听message事件,并在消息处理函数中执行web-view的关闭操作。第二种方案则采用服务器中转机制:主应用和子应用均通过WebSocket连接至中转服务器,实现命令的发送与接收。相较而言,第二种方案实现复杂度较高,且易受网络环境影响。因此,本文将采用第一种方案进行实现。

3 实现

3.1 子应用实现

  • 下载uni.webview.1.5.6.js

在子项目中,下载uni.webview.js,我使用的是uni.webview.1.5.6.js,下载地址为:

https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js

将下载完成的uni.webview.1.5.6.js文件复制到项目的目录/static/js/目录下(如果目录不存在,则可以手动创建这个目录)。

  • 引用

修改main.js, 添加对uni.webview.1.5.6.js的引用:

import '/static/js/uni.webview.1.5.6.js'
  • 调用postMessage

在需要返回主应用的地方,添加如下代码

if(uni.webView) {
	console.log("支持uni.webview", uni.webView);
	uni.webView.postMessage({
		data: {
			action: 'backToPlatform'
		}
	});
} else {
	console.log("不支持uni.webview");
}

3.2 主应用实现

  • 模版
<web-view
	 :embed="true" 
	 :src="imViewUrl" 
	 @message="handleMessage" 
/>
  • js
export default {
	//其他代码
	methods: {
		handleMessage(e) {
			if(e && e.detail && e.detail.data && e.detail.data.length > 0) {
				const { action } = e.detail.data[0];
				if(action == 'backToPlatform') {
				//在这里,我们可以通过显隐条件或refs对象的操作来关闭web-view
				}
			}
		},
	}
	//其他代码

3.3 主应用发送消息到H5

  • app端
var currentWebview = that.$parent.$scope.$getAppWebview()
currentWebview.children()[0].evalJS(`onMicrophonePermResult(${res ? 'true' : 'false'})`);
  • h5段
	mounted() {
		// 将方法挂载到 window,供主应用调用
		window.onMicrophonePermResult = (result) => {
			console.log("onMicrophonePermResult result=", result)
		};
	},

总结 

到此这篇关于uni-app之webview通信实现的文章就介绍到这了,更多相关uni-app webview通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue弹出框组件封装实例代码

    vue弹出框组件封装实例代码

    这篇文章主要介绍了vue弹出框组件封装,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Vue 实现v-for循环的时候更改 class的样式名称

    Vue 实现v-for循环的时候更改 class的样式名称

    这篇文章主要介绍了Vue 实现v-for循环的时候更改 class的样式名称,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • springboot vue接口测试前端模块树和接口列表

    springboot vue接口测试前端模块树和接口列表

    这篇文章主要为大家介绍了springboot vue接口测试前端模块树和接口列表,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 解决VMware中vmware-vmx.exe进程无法关闭以及死机等问题

    解决VMware中vmware-vmx.exe进程无法关闭以及死机等问题

    这篇文章主要介绍了解决VMware中vmware-vmx.exe进程无法关闭以及死机等问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • vue本地打开build后生成的dist文件夹index.html问题

    vue本地打开build后生成的dist文件夹index.html问题

    这篇文章主要介绍了vue本地打开build后生成的dist文件夹index.html问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-09-09
  • 解决vue scoped scss 无效的问题

    解决vue scoped scss 无效的问题

    这篇文章主要介绍了解决vue scoped scss 无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue数据双向绑定原理实例解析

    Vue数据双向绑定原理实例解析

    这篇文章主要介绍了Vue数据双向绑定原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • vue MVVM双向绑定实例详解(数据劫持+发布者-订阅者模式)

    vue MVVM双向绑定实例详解(数据劫持+发布者-订阅者模式)

    使用vue也好有一段时间了,也算对其双向绑定原理也有了解个大概,这篇文章主要给大家介绍了关于vue MVVM双向绑定(数据劫持+发布者-订阅者模式)的相关资料,需要的朋友可以参考下
    2022-03-03
  • VUE实现一个分页组件的示例

    VUE实现一个分页组件的示例

    本篇文章主要介绍了VUE实现一个分页组件的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • electron dialog.showMessageBox的使用案例

    electron dialog.showMessageBox的使用案例

    Electron Dialog 模块提供了api来展示原生的系统对话框,本文主要介绍了electron dialog.showMessageBox的使用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论