ttk-app-core
Version:
@ttk/recat enterprise develop framework
87 lines (74 loc) • 2.19 kB
JavaScript
import React, { useCallback, useState, useEffect } from 'react'
import { Button, Input, message } from 'antd'
import "./style.less"
export default React.memo(Page)
function Page(props) {
const [value, setValue] = useState('')
const onOpen = useCallback(() => {
window.top.postMessage({
method: "openNewTab",
name: "打开我",
iframeUrl: "https://es6.ruanyifeng.com"
}, "*")
}, [])
const onClose = useCallback(() => {
window.top.postMessage({
method: "closeCurrentTab",
name: "打开我",
iframeUrl: "https://es6.ruanyifeng.com"
}, "*")
}, [])
const onSend = useCallback(() => {
window.top.postMessage({
method: "senMsgToTop",
body: value
}, "*")
}, [value])
const onChange = useCallback((e) => {
setValue(e.target.value)
})
useEffect(() => {
const onMessage = (e) => {
let msg
if (typeof (e.data) == "string") {
msg = JSON.parse(e.data)
} else {
msg = e.data
}
let { method, body } = msg
switch (method) {
case 'senMsgToChild':
message.info(`收到来自父级窗口信息:${body}`)
break;
default:
break
}
}
if (window.addEventListener) {
window.addEventListener('message', onMessage, false)
} else if (window.attachEvent) {
window.attachEvent('onmessage', onMessage)
} else {
window.onmessage = this.onMessage
}
return () => {
if (window.removeEventListener) {
window.removeEventListener('message', onMessage, false)
} else if (window.detachEvent) {
window.detachEvent('onmessage', this.onMessage)
} else {
window.onmessage = undefined
}
}
})
return (
<div style={{padding: "20px"}}>
<p><Button type="primary" onClick={() => onOpen()}>点我打开新窗口</Button></p>
<p><Button type="primary" onClick={() => onClose()}>点我关闭新窗口</Button></p>
<p>
<Input className="iframe-input" value={value} onChange={(e) => onChange(e)}/>
<Button type="primary" onClick={() => onSend()}>向父窗口发送信息</Button>
</p>
</div>
)
}