|
@@ -1,20 +1,20 @@
|
|
|
-import { browser, getRandomKey } from '@/helpers/utils';
|
|
|
+import { browser, getRandomKey } from '@/helpers/utils'
|
|
|
|
|
|
export interface IPostMessage {
|
|
|
- api: string;
|
|
|
- content?: any;
|
|
|
+ api: string
|
|
|
+ content?: any
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 劫持postMessage
|
|
|
*/
|
|
|
|
|
|
-const originalPostMessage = window.postMessage;
|
|
|
+const originalPostMessage = window.postMessage
|
|
|
|
|
|
window.postMessage = (message: IPostMessage) => {
|
|
|
// console.log('通过劫持', message)
|
|
|
- originalPostMessage(message, '*');
|
|
|
-};
|
|
|
+ originalPostMessage(message, '*')
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -24,90 +24,102 @@ window.postMessage = (message: IPostMessage) => {
|
|
|
*
|
|
|
*/
|
|
|
|
|
|
-type CallBack = (evt?: IPostMessage) => void;
|
|
|
+type CallBack = (evt?: IPostMessage) => void
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
|
-const loop = () => {};
|
|
|
+const loop = () => {}
|
|
|
|
|
|
-const calls: { [key: string]: CallBack | CallBack[] } = {};
|
|
|
+const calls: { [key: string]: CallBack | CallBack[] } = {}
|
|
|
|
|
|
-const browserInfo = browser();
|
|
|
+const browserInfo = browser()
|
|
|
|
|
|
if (browserInfo.isApp) {
|
|
|
window.addEventListener('message', evt => {
|
|
|
try {
|
|
|
+ console.log(evt, 'message', evt.data)
|
|
|
const data = evt.data
|
|
|
? typeof evt.data === 'object'
|
|
|
? evt.data
|
|
|
: JSON.parse(evt.data)
|
|
|
- : {};
|
|
|
- const uuid = data.content?.uuid || data.uuid;
|
|
|
+ : {}
|
|
|
+ const uuid = data.content?.uuid || data.uuid
|
|
|
+ console.log(uuid, data.content, 'uuid')
|
|
|
try {
|
|
|
if (data.content) {
|
|
|
- data.content = JSON.parse(data.content);
|
|
|
+ data.content = JSON.parse(data.content)
|
|
|
}
|
|
|
} catch (error) {
|
|
|
//
|
|
|
}
|
|
|
if (data?.content?.uuid) {
|
|
|
- console.log('data', data);
|
|
|
+ console.log('data', data)
|
|
|
}
|
|
|
if (!uuid) {
|
|
|
const keys = Object.keys(calls).filter(
|
|
|
key => key.indexOf(data.api) === 0
|
|
|
- );
|
|
|
+ )
|
|
|
+ console.log(keys, 'keys')
|
|
|
+ console.log(data, 'data')
|
|
|
for (const key of keys) {
|
|
|
- const callback = calls[key] || loop;
|
|
|
- typeof callback === 'function' && callback(data);
|
|
|
+ const callback = calls[key] || loop
|
|
|
+ typeof callback === 'function' && callback(data)
|
|
|
}
|
|
|
- return;
|
|
|
+ return
|
|
|
}
|
|
|
- const callId = data.content?.uuid || data.uuid || data.api + data.uuid;
|
|
|
- const callback = calls[callId] || loop;
|
|
|
- typeof callback === 'function' && callback(data);
|
|
|
+ const callId = data.content?.uuid || data.uuid || data.api + data.uuid
|
|
|
+ const callback = calls[callId] || loop
|
|
|
+ console.log(data, 'data')
|
|
|
+ typeof callback === 'function' && callback(data)
|
|
|
} catch (error) {
|
|
|
- console.error('通信消息解析错误', error);
|
|
|
+ console.error('通信消息解析错误', error)
|
|
|
}
|
|
|
- });
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
const instance: any =
|
|
|
- (window as any).DAYA || (window as any).webkit?.messageHandlers?.DAYA;
|
|
|
+ (window as any).COLEXIU || (window as any).webkit?.messageHandlers?.COLEXIU
|
|
|
|
|
|
export const postMessage = (data: IPostMessage, callback?: CallBack) => {
|
|
|
if (browserInfo.isApp) {
|
|
|
- const uuid = getRandomKey();
|
|
|
- calls[uuid] = callback || loop;
|
|
|
- data.content = data.content ? { ...data.content, uuid } : { uuid };
|
|
|
- instance.postMessage(JSON.stringify(data));
|
|
|
- console.log('send:', JSON.stringify(data));
|
|
|
+ const uuid = getRandomKey()
|
|
|
+ calls[uuid] = callback || loop
|
|
|
+ data.content = data.content ? { ...data.content, uuid } : { uuid }
|
|
|
+ instance.postMessage(JSON.stringify(data))
|
|
|
+ console.log('send:', JSON.stringify(data))
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
+// export const listenerMessage = (api: string, callback: CallBack) => {
|
|
|
+// console.log(browserInfo, 'browserInfo', api, 'api', callback)
|
|
|
+// if (browserInfo.isApp) {
|
|
|
+// const uuid = api
|
|
|
+// if (!calls[uuid]) {
|
|
|
+// calls[uuid] = []
|
|
|
+// }
|
|
|
+// ;(calls[uuid] as CallBack[]).push(callback || loop)
|
|
|
+// }
|
|
|
+// }
|
|
|
export const listenerMessage = (api: string, callback: CallBack) => {
|
|
|
if (browserInfo.isApp) {
|
|
|
- const uuid = api;
|
|
|
- if (!calls[uuid]) {
|
|
|
- calls[uuid] = [];
|
|
|
- }
|
|
|
- (calls[uuid] as CallBack[]).push(callback || loop);
|
|
|
+ const uuid = api + getRandomKey()
|
|
|
+ calls[uuid] = callback || loop
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
export const removeListenerMessage = (api: string, callback: CallBack) => {
|
|
|
if (browserInfo.isApp) {
|
|
|
- const uuid = api;
|
|
|
+ const uuid = api
|
|
|
if (Array.isArray(calls[uuid])) {
|
|
|
- const indexOf = (calls[uuid] as CallBack[]).indexOf(callback);
|
|
|
- (calls[uuid] as CallBack[]).splice(indexOf, 1);
|
|
|
+ const indexOf = (calls[uuid] as CallBack[]).indexOf(callback)
|
|
|
+ ;(calls[uuid] as CallBack[]).splice(indexOf, 1)
|
|
|
}
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
export const promisefiyPostMessage = (
|
|
|
data: IPostMessage
|
|
|
): Promise<IPostMessage | undefined> => {
|
|
|
return new Promise(resolve => {
|
|
|
- postMessage(data, res => resolve(res));
|
|
|
- });
|
|
|
-};
|
|
|
+ postMessage(data, res => resolve(res))
|
|
|
+ })
|
|
|
+}
|