import { UscFrameMessageEvent } from './../event/UscFrameMessageEvent'; import { nanoid } from "nanoid" export class IframeMessageReciver { resolves: Map = new Map() constructor() { globalThis.addEventListener("message", (event) => this.reciveMessage(event), false) } /** * 注册服务处理 */ registerMesssageProcess(type: string, resolve: Function) { this.resolves.set(type, resolve) } /** * 接收父页面传递来的消息 */ async reciveMessage({ data, source }: MessageEvent) { let { requestId, payload } = data if (payload !== undefined) { let resolve = this.resolves.get(payload.type) if (resolve) { let result = await resolve(payload.data) source?.postMessage({ requestId, payload: result }, { targetOrigin: "*" }) } else { source?.postMessage({ requestId, payload: { success: false, message: "接口未定义:" + payload.type } }, { targetOrigin: "*" }) } } } /** * 向父亲页面上报消息 */ async popMessage(type: UscFrameMessageEvent, data: any) { let requestId = nanoid() if (globalThis.parent !== globalThis.window) { globalThis.parent.postMessage({ requestId, payload: { type, data } }, "*") } } }