iframe 子父页面互相通信

2024-02-26 13:18

本文主要是介绍iframe 子父页面互相通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识点

1、父页面向子页面发送消息const idIframe = document.getElementById("idIframe").contentWindowconst data = {data: 10000}idIframe.postMessage(data, '*');2、子页面向父页面发送消息const data = {data: 10000}window.parent.postMessage(data , "*");3、接收消息方法window.addEventListener('message', function (e) {// do something})

父页面

import React, { useState } from 'react';
import {Spin, Button} from 'antd'export default class IframeIndex extends React.Component {refIframe = React.createRef()constructor() {super()this.state ={loading: true}}componentDidMount(){const idIframe = document.getElementById("idIframe")idIframe.onload = () => {this.setState({loading: false})}window.addEventListener("message", this.handleMessage)}/*** 监听子页面传过来的值的方法* @param {Object} event*/handleMessage(event) {console.log(event, '监听子页面传过来的值的方法');// do something}/*** 向iframe传值的方法* @param {Object} data*/sendMessage = () => {const idIframe = document.getElementById("idIframe").contentWindowconst data = {data: 10000}idIframe.postMessage(data, '*');}render() {const { loading } = this.statereturn(<><Spin spinning={loading}><Button onClick={this.sendMessage}>向iframe传值的方法</Button><iframeid={"idIframe"}ref={this.refIframe}frameBorder="0"src={'http://localhost:8000/iframe/child'}width={"100%"}height={"400px"}></iframe></Spin></>)}
}

子页面

import React, { useState } from 'react';import { Button } from 'antd';export default class IframeIndex extends React.Component {constructor() {super();this.state = {};}componentDidMount() {// 监听postMessage 数据window.addEventListener('message', (e) => {console.log(e);});}/*** 向iframe传值的方法* @param {Object} data*/sendMessage = () => {const idIframe = document.getElementById('idIframe').contentWindow;const data = { data: 10000 };idIframe.postMessage(data, '*');};render() {return (<><div style={{ padding: '10px' }}><Button size='small' onClick={() => this.postMessage()}>向父页面传值</Button>&nbsp;</div></>);}
}

这篇关于iframe 子父页面互相通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

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

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

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

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