赞
踩
/**
* message 传递数据
* 例:{ type: 'create', data: {x: 1, y: 2, z: 3} } // 新增逻辑 新增数据是data
* target 通信目标 默认取页面第一个iframe
* origin 设置通信范围 默认 (*) 无限制
*/
const postMessageHandle = (message, target = window[0], origin = '*') => {
target.postMessage(message, origin);
};
**【注意】**iframe 的 src 填自己的地址
import React, { useEffect, useRef } from 'react'
export default function index() {
const myRef = useRef(null);
useEffect(() => {
// 添加message事件,监听iframe页面回传信息
window.addEventListener('message', receiveInitMsg, false);
return () => {
window.removeEventListener('message', receiveInitMsg, false);
};
}, []);
const receiveInitMsg = (event) => {
console.log('子(iframe)传父', event?.data);
if (event?.data?.type === 'send_parent_data') {
console.log('保存最后的操作');
} else if (event?.data?.type === '回传数据') {
// 根据 iframe 回传内容,写各自页面逻辑代码
}
};
// 给iframe页面传递数据
const parentToChild = () => {
if (myRef) {
myRef.contentWindow.postMessage({
type: 'to iframe child',
data: {}
},'*')
}
}
return (
<div>
<iframe
ref={myRef}
src="http://localhost:3000/#/test"
frameBorder="0"
width="800px"
height="600px"
/>
</div>
)
}
import React, { useEffect, useRef } from 'react';
export default function index() {
const inpRef = useRef(null);
useEffect(() => {
// 添加监听事件,监听父页面回传的消息
window.addEventListener('message', receiveInitMsg, false);
// postMessage,向父页面发送消息,默认第一次渲染回传空数据(有默认值回传默认值也行)
window.parent.postMessage(
{
type: 'send_parent_data',
data: {}
},
'*'
);
return () => {
window.removeEventListener('message', receiveInitMsg, false);
};
}, []);
const receiveInitMsg = (event) => {
console.log(event, 'event父传子触发成功');
if (event?.data?.type === 'send_child') {
// 自己的业务逻辑代码
console.log('父传子(iframe):', event?.data);
window.parent.postMessage(
{
type: 'send_parent_data',
data: {
val: inpRef.current.value
}
},
'*'
);
} else if (event?.data?.type === 'getPageData') {
// 自己的业务逻辑代码
}
};
// iframe 页面手动回传数据给父页面
const iframe_to_parent = () => {
window.parent.postMessage(
{
type: 'send_parent_data',
data: {
inpVal: inpRef.current.value
}
},
'*'
);
};
return (
<div className="child">
<div>
<input type="text" ref={inpRef} />
<button onClick={iframe_to_parent}>发送</button>
</div>
</div>
);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。