瀏覽代碼

[edit][messageId]

zhangwei 2 年之前
父節點
當前提交
909209e42e
共有 1 個文件被更改,包括 24 次插入11 次删除
  1. 24 11
      src/uilts/messageCenter/iframe/index.js

+ 24 - 11
src/uilts/messageCenter/iframe/index.js

@@ -10,7 +10,9 @@ class IframeMessageCenter {
     }
 
     send({ info = {}, data = {}, callback, overTime, failback }) {
-        info.messageId = `${info.actionType}-${guid()}` // 唯一的ID,用于标记回调函数
+        if (callback) {
+            info.messageId = `${info.actionType}-${guid()}` // 唯一的ID,用于标记回调函数
+        }
         window.parent.postMessage({
             info,
             data
@@ -24,14 +26,14 @@ class IframeMessageCenter {
         }
     }
 
-    listen(messageId, callback) {
+    listen(key, callback) {
         // 序列添加失败回调
-        this.messageCallbackMap.set(messageId, { callback })
+        this.messageCallbackMap.set(key, { callback })
     }
 
-    addFailback(messageId, overTime = 2000, failback) {
+    addFailback(key, overTime = 2000, failback) {
         // 序列添加失败回调
-        this.messageFailbackMap.set(messageId, {
+        this.messageFailbackMap.set(key, {
             time: new Date().getTime(),
             overTime,
             failback
@@ -42,16 +44,27 @@ class IframeMessageCenter {
     init() {
         window.addEventListener('message', (e) => {
             let { info = {}, data = {} } = e.data;
-            // 序列删除 失败回调
-            this.messageFailbackMap.delete(info.messageId);
+            let key, item
+
+            // 如果有messageId && 是自己发送的
+            if (info.messageId) {
+                key = info.messageId
+                item = this.messageCallbackMap.get(key)
+            }
+
+            if (info.actionType && !item) {
+                key = info.actionType
+                // 序列删除 失败回调                
+                item = this.messageCallbackMap.get(key)
+            }
 
             // 执行成功回调
-            const _item = this.messageCallbackMap.get(info.messageId);
-            if (_item) {
-                const callback = _item.callback
+            if (item) {
+                this.messageFailbackMap.delete(key)
+                const callback = item.callback
                 callback(data)
                 // 序列删除 成功回调
-                this.messageCallbackMap.delete(info.messageId)
+                this.messageCallbackMap.delete(key)
             }
         })