|
@@ -29,7 +29,7 @@ type CallBack = (evt?: IPostMessage) => void;
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
|
const loop = () => {};
|
|
|
|
|
|
-const calls: { [key: string]: CallBack } = {};
|
|
|
+const calls: { [key: string]: CallBack | CallBack[] } = {};
|
|
|
|
|
|
const browserInfo = browser();
|
|
|
|
|
@@ -58,13 +58,13 @@ if (browserInfo.isApp) {
|
|
|
);
|
|
|
for (const key of keys) {
|
|
|
const callback = calls[key] || loop;
|
|
|
- callback(data);
|
|
|
+ typeof callback === 'function' && callback(data);
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
const callId = data.content?.uuid || data.uuid || data.api + data.uuid;
|
|
|
const callback = calls[callId] || loop;
|
|
|
- callback(data);
|
|
|
+ typeof callback === 'function' && callback(data);
|
|
|
} catch (error) {
|
|
|
console.error('通信消息解析错误', error);
|
|
|
}
|
|
@@ -86,8 +86,21 @@ export const postMessage = (data: IPostMessage, callback?: CallBack) => {
|
|
|
|
|
|
export const listenerMessage = (api: string, callback: CallBack) => {
|
|
|
if (browserInfo.isApp) {
|
|
|
- const uuid = api + getRandomKey();
|
|
|
- calls[uuid] = callback || loop;
|
|
|
+ const uuid = api;
|
|
|
+ if (!calls[uuid]) {
|
|
|
+ calls[uuid] = [];
|
|
|
+ }
|
|
|
+ (calls[uuid] as CallBack[]).push(callback || loop);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+export const removeListenerMessage = (api: string, callback: CallBack) => {
|
|
|
+ if (browserInfo.isApp) {
|
|
|
+ const uuid = api;
|
|
|
+ if (Array.isArray(calls[uuid])) {
|
|
|
+ const indexOf = (calls[uuid] as CallBack[]).indexOf(callback);
|
|
|
+ (calls[uuid] as CallBack[]).splice(indexOf, 1);
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
|