uniapp webview子页面向父页面发送数据和触发事件,重点在第3条!!!

本文主要是介绍uniapp webview子页面向父页面发送数据和触发事件,重点在第3条!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、众所周知H5中iframe可以用过postmessage进行,从H5子页面向H5父页面进行通信。方法如下:

// 子页面
window.parent.postMessage({ data: '你的消息' }, '*');// 父页面
<iframe src="xxxxxxxxxxx"></iframe>
window.addEventListener('message', function(event) {console.log('收到父页面的消息:', event.data);
});

以上方法也适用在uniapp webview 子页面向父页面进行通信。
页面卸载是记得将事件removeEventListener


2、 在uniapp微信小程序webview中,H5子页面向微信小程序父页面进行通信。方法如下:

// 首先需要引入jssdk
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>// 子页面
window.parent.postMessage({ data: '你的消息' }, '*');
// 但在以上特定时机才会触发组件的message事件:小程序后退、组件销毁、分享、复制链接
// 这时候可以通过上面jssdk注册的方法进行触发
// 注意:如果父页面是H5页面,并且注册了window.addEventListener('message')方法。
// 那么执行以下方法,该addEventListener方法还会再触发一次。
// 其他返回方法不会触发addEventListener!!!!!!!!
wx.miniProgram.navigateBack();// 父页面
<web-view src="xxxxxxxxxxx" @message="onMessage"></web-view>
onMessage(e) {console.log('收到父页面的消息:', e);
}



3、在第2种情况下,有个特殊情况很坑!!!!!,因为注册的wx方法会冲突。

在uniapp微信小程序webview中,uniapp H5子页面向微信小程序父页面进行通信。

如果还是用第2种方法。wx.miniProgram将会是undefined,因为uniapp定义的wx将覆盖jssdk注册的wx方法。
这时通过再引入一个uni-webview.js文件得以解决,
下载链接:https://download.csdn.net/download/guoqu1919/88864022?utm_source=bbsseo
整体代码如下:

// 首先需要引入jssdk和js文件
// 注意:uni sdk放到body下面(也就是要在body标签尾部放入以下三个script标签代码,这个很重要!!!!!)
// 因为uni需要在uniapp自身uni定义之前定义,如果你放在body外部,uni还没赋值给uniWebView就被覆盖了。
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script src="uni-webview.js"></script>
<script>const uniWebView = uni;
</script>// 子页面(其实与第2种逻辑相同,只不过换了方法)
uniWebView.webView.postMessage({data: {}})
uniWebView.webView.navigateBack();// 父页面
<web-view src="xxxxxxxxxxx" @message="onMessage"></web-view>
onMessage(e) {console.log('收到父页面的消息:', e);
}

这个方法使用于H5子页面微信小程序webview父页面通信,也就是适用于第2种第3种情况。

这篇关于uniapp webview子页面向父页面发送数据和触发事件,重点在第3条!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091048

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在