Files
Home-Toolbox-Plugin/utils/pageMessage.ts
T
Paul ef26533127 Insert SyncButton on bilibili bangumi detail page to update progress
插入一个手动同步的按钮,以提交追番进度到服务器
2024-04-21 23:34:23 +08:00

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