47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
// 发送一条消息(二次封装类型)
|
|
export const postPageMessage = (data: PageMessage.Messages) => {
|
|
return window.postMessage(data);
|
|
};
|
|
|
|
// 接收一条消息
|
|
export const receivePageMessage = (
|
|
fn: (data: PageMessage.Messages) => void,
|
|
eventName?: PageMessage.Messages["type"]
|
|
) => {
|
|
const eventFn = (ev: MessageEvent<PageMessage.Messages>) => {
|
|
if (!ev.data) {
|
|
return;
|
|
}
|
|
|
|
if (eventName && ev.data.type === eventName) {
|
|
fn(ev.data);
|
|
} else if (!eventName && ev.data.type?.includes("toolbox::")) {
|
|
fn(ev.data);
|
|
}
|
|
};
|
|
|
|
window.addEventListener("message", eventFn);
|
|
|
|
return () => {
|
|
window.removeEventListener("message", eventFn);
|
|
};
|
|
};
|
|
|
|
// 等待一条消息的推送
|
|
export const waitPageMessage = (eventName: PageMessage.Messages["type"]) => {
|
|
return new Promise<PageMessage.Messages>((resolve) => {
|
|
const eventFn = (ev: MessageEvent<PageMessage.Messages>) => {
|
|
if (!ev.data) {
|
|
return;
|
|
}
|
|
|
|
if (eventName && ev.data.type === eventName) {
|
|
window.removeEventListener("message", eventFn);
|
|
resolve(ev.data);
|
|
}
|
|
};
|
|
|
|
window.addEventListener("message", eventFn);
|
|
});
|
|
};
|