Home-Toolbox-Plugin/utils/pageMessage.ts

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);
});
};