소스 검색

[edit][chrome消息通信回调]

zhangwei 2 년 전
부모
커밋
ddeaa02f2f

+ 25 - 0
src/denet/chrome/content.js

@@ -0,0 +1,25 @@
+import chromeMessageCenter from '@/uilts/messageCenter/chrome';
+import MESSAGE_ENUM from '@/uilts/messageCenter/chrome/messageEnum'
+
+export default {
+    // ---- 获取推文文案 ---- 
+    test({ tweetId }, overTime) {
+        return new Promise((res, rej) => {
+            chromeMessageCenter.sendToSW({
+                info: {
+                    actionType: MESSAGE_ENUM.CONTENT_TO_BACK_TEST,
+                },
+                data: {
+                    tweetId
+                },
+                overTime,
+                callback: (data) => {
+                    res(data);
+                },
+                failback: (e) => {
+                    rej(e)
+                }
+            })
+        })
+    }
+}

+ 5 - 23
src/denet/chrome/index.js

@@ -1,25 +1,7 @@
-import chromeMessageCenter from '@/uilts/messageCenter/chrome';
-import MESSAGE_ENUM from '@/uilts/messageCenter/chrome/messageEnum'
+import content from '@/denet/chrome/content'
+import sw from '@/denet/chrome/sw'
 
 export default {
-    // ---- 获取推文文案 ---- 
-    test({ tweetId }, overTime) {
-        return new Promise((res, rej) => {
-            chromeMessageCenter.send({
-                info: {
-                    actionType: MESSAGE_ENUM.BACK_TO_CONTENT_TEST,
-                },
-                data: {
-                    tweetId
-                },
-                overTime,
-                callback: (data) => {
-                    res(data);
-                },
-                failback: (e) => {
-                    rej(e)
-                }
-            })
-        })
-    }
-}
+    content,
+    sw
+}

+ 25 - 0
src/denet/chrome/sw.js

@@ -0,0 +1,25 @@
+import chromeMessageCenter from '@/uilts/messageCenter/chrome';
+import MESSAGE_ENUM from '@/uilts/messageCenter/chrome/messageEnum'
+
+export default {
+    // ---- 获取推文文案 ---- 
+    test({ tweetId }, overTime) {
+        return new Promise((res, rej) => {
+            chromeMessageCenter.sendToContent({
+                info: {
+                    actionType: MESSAGE_ENUM.BACK_TO_CONTENT_TEST,
+                },
+                data: {
+                    tweetId
+                },
+                overTime,
+                callback: (data) => {
+                    res(data);
+                },
+                failback: (e) => {
+                    rej(e)
+                }
+            })
+        })
+    }
+}

+ 3 - 1
src/denet/index.js

@@ -1,7 +1,9 @@
 import content from '@/denet/content'
+import chrome from '@/denet/chrome'
 
 const denet = {
-    content
+    content,
+    chrome
 }
 
 export default denet

+ 98 - 78
src/entry/background.js

@@ -224,84 +224,15 @@ function onInstalledMethod({ id, previousVersion, reason }) {
 
 function onMessageMethod(req, sender, sendResponse) {
     try {
-        if (req) {
-            switch (req.actionType) {
-                case "POPUP_LOGIN":
-                    twitterPinLoginToken();
-                    sendResponse('ok');
-                    break;
-                case "POPUP_PUBLISH_TWITTER_RED_PACK":
-                    popupRePublish(req);
-                    sendResponse('ok');
-                    break;
-                case "POPUP_SHOW_DENET_PUBLISH_DIALOG":
-                    checkShowPublishDialog();
-                    break;
-                case 'CONTENT_GET_PINED':
-                    checkPined();
-                    break;
-                case 'CONTENT_SET_BADGE':
-                    setBadgeInfo(req);
-                    break;
-                case 'CONTENT_HIDE_BADGE':
-                    hideBadge();
-                    break
-                case 'CONTENT_SEND_CODE':
-                    twitterPinLoginCode(sender, req.code);
-                    break;
-                case 'CONTENT_TWITTER_LOGIN':
-                    if (req.data) {
-                        twitterPinLoginToken();
-                        sendResponse('ok');
-                    }
-                    break
-                case "CONTENT_SEND_DISCORD_AUTH_CODE":
-                    discordLoginCode(req, sender);
-                    break
-                case 'RED_PACKET_SAVE_DISCORD_AUTH_WINDOW_ID':
-                    saveDiscordAuthWindowId(req);
-                    sendResponse('ok');
-                    break;
-                case 'CONTENT_FACEBOOK_SHARE_SUCCESS':
-                    facebookShareSuccess(req, sender);
-                    break;
-                case 'CONTENT_PONG':
-                    sendResponse('CONTENT_PONG');
-                    break
-                case 'CONTENT_WINDOW_LOADED_SET_POPUP_PAGE':
-                    // windwoLoadSetPopupPage(req, sender);
-                    break;
-                case 'CONTENT_SET_POPUP_CONFIG':
-                    setActionPopup(req, sender);
-                    break;
-                case 'CONTENT_GET_TWITTER_NFT_POST_PRE':
-                    getTwitterNftPostPre(req.data, sender)
-                    break
-                case 'CONTENT_NFT_TXT_PUBLISH':
-                    nftTxtPublish(req.data, sender)
-                    break
-                case 'CONTENT_HTTP_NET_WORK':
-                    httpNetWork(req.funcName, req.data, sender)
-                    break
-                case 'HTTP_CONTENT_TO_BACK':
-                    httpContentToBack(req, sender)
-                    sendResponse('ok')
-                    break
-                case 'CONTENT_TWITTER_SHORT_LINK':
-                    sendResponse('ok')
-                    req.arr_url.forEach(item => {
-                        if (item) {
-                            twitterShortUrl(sender, item)
-                        }
-                    });
-                    break
-                case 'CONTENT_CLOSE_ACH_PAY_NOTICE':
-                    closeAchPayNoticeHandler();
-                    break;
-            }
-
-            chromeMessageCenter.init(req)
+        if (!req) {
+            return
+        }
+        if (req.info) {
+            newOnMessageMethod(req, sender, sendResponse)
+        } else if (req.actionType) {
+            oldOnMessageMethod(req, sender, sendResponse)
         }
+        chromeMessageCenter.init(req)
     } catch (error) {
         Report.reportLog({
             objectType: Report.objectType.background_function_catch,
@@ -311,4 +242,93 @@ function onMessageMethod(req, sender, sendResponse) {
     }
 }
 //加载bg.js 执行
-setMessageCount();
+setMessageCount();
+
+const newOnMessageMethod = (req, sender, sendResponse) => {
+    let { info = {}, data = {} } = req
+    switch (info.actionType) {
+        case 'CONTENT_TO_BACK_TEST':
+            chromeMessageCenter.sendToContent(sender, { info, data: '123' })
+            break;
+
+        default:
+            break;
+    }
+}
+
+const oldOnMessageMethod = (req, sender, sendResponse) => {
+    switch (req.actionType) {
+        case "POPUP_LOGIN":
+            twitterPinLoginToken();
+            sendResponse('ok');
+            break;
+        case "POPUP_PUBLISH_TWITTER_RED_PACK":
+            popupRePublish(req);
+            sendResponse('ok');
+            break;
+        case "POPUP_SHOW_DENET_PUBLISH_DIALOG":
+            checkShowPublishDialog();
+            break;
+        case 'CONTENT_GET_PINED':
+            checkPined();
+            break;
+        case 'CONTENT_SET_BADGE':
+            setBadgeInfo(req);
+            break;
+        case 'CONTENT_HIDE_BADGE':
+            hideBadge();
+            break
+        case 'CONTENT_SEND_CODE':
+            twitterPinLoginCode(sender, req.code);
+            break;
+        case 'CONTENT_TWITTER_LOGIN':
+            if (req.data) {
+                twitterPinLoginToken();
+                sendResponse('ok');
+            }
+            break
+        case "CONTENT_SEND_DISCORD_AUTH_CODE":
+            discordLoginCode(req, sender);
+            break
+        case 'RED_PACKET_SAVE_DISCORD_AUTH_WINDOW_ID':
+            saveDiscordAuthWindowId(req);
+            sendResponse('ok');
+            break;
+        case 'CONTENT_FACEBOOK_SHARE_SUCCESS':
+            facebookShareSuccess(req, sender);
+            break;
+        case 'CONTENT_PONG':
+            sendResponse('CONTENT_PONG');
+            break
+        case 'CONTENT_WINDOW_LOADED_SET_POPUP_PAGE':
+            // windwoLoadSetPopupPage(req, sender);
+            break;
+        case 'CONTENT_SET_POPUP_CONFIG':
+            setActionPopup(req, sender);
+            break;
+        case 'CONTENT_GET_TWITTER_NFT_POST_PRE':
+            getTwitterNftPostPre(req.data, sender)
+            break
+        case 'CONTENT_NFT_TXT_PUBLISH':
+            nftTxtPublish(req.data, sender)
+            break
+        case 'CONTENT_HTTP_NET_WORK':
+            httpNetWork(req.funcName, req.data, sender)
+            break
+        case 'HTTP_CONTENT_TO_BACK':
+            httpContentToBack(req, sender)
+            sendResponse('ok')
+            break
+        case 'CONTENT_TWITTER_SHORT_LINK':
+            sendResponse('ok')
+            req.arr_url.forEach(item => {
+                if (item) {
+                    twitterShortUrl(sender, item)
+                }
+            });
+            break
+        case 'CONTENT_CLOSE_ACH_PAY_NOTICE':
+            closeAchPayNoticeHandler();
+            break;
+    }
+}

+ 25 - 10
src/entry/content.js

@@ -42,7 +42,7 @@ import {
     sendContentByTwitterID,
     getExtensionStorgeDataForIframe
 } from "@/logic/content/twitter.js";
-
+import denet from '@/denet'
 import { httpBackToContentCallBack } from '@/uilts/chromeExtension.js'
 import {
     hideNFTGroupList,
@@ -61,6 +61,7 @@ import {
 
 import doTask from '@/logic/content/help/doTask'
 import chromeMessageCenter from '@/uilts/messageCenter/chrome';
+import { re } from "mathjs";
 
 chrome.storage.onChanged.addListener(changes => {
     initExecuteScript(changes)
@@ -81,7 +82,7 @@ window.onmessage = (res) => {
     if (!res.data) {
         return
     }
-    let { info, data } = res.data
+    let { info = {}, data = {} } = res.data
     if ((res.data.actionType) || (info && info.actionType)) {
         switch (info.actionType || res.data.actionType) {
             case "IFRAME_SHOW_IFREME":
@@ -142,8 +143,7 @@ window.onmessage = (res) => {
     }
 };
 
-
-chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
+const oldOnMessageMethod = (req, sender, sendResponse) => {
     switch (req.actionType) {
         case 'BG_SHOW_PIN_TIPS':
             showPinTips()
@@ -256,12 +256,27 @@ chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
             console.log('TEST')
             break
     }
+}
+
+const newOnMessageMethod = (req, sender, sendResponse) => {
+
+}
+chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
+    if (req.actionType) {
+        oldOnMessageMethod(req, sender, sendResponse)
+    } else if (req.info) {
+        newOnMessageMethod(req, sender, sendResponse)
+        chromeMessageCenter.init(req)
+    }
     sendResponse && sendResponse('ok');
-    chromeMessageCenter.init(req)
-})
 
-// denet.chrome.test().then() 发background activeType 获取返回调用
+})
 
-// content to background tabId
-// background to content 
-// content to background tabId
+// --- test ---
+// async function funcTest() {
+//     let res = await denet.chrome.content.test({ tweetId: 22 })
+//     console.log('test sendmessage', res)
+// }
+// setTimeout(() => {
+//     funcTest()
+// }, 3000);

+ 30 - 4
src/uilts/messageCenter/chrome/index.js

@@ -1,6 +1,6 @@
 import { guid } from '@/uilts/help'
 //  iframe 通信中心
-class MessageCenter {
+class ChromeMessageCenter {
     constructor() {
         //  缓存事件队列
         this.messageCallbackMap = new Map();
@@ -8,7 +8,33 @@ class MessageCenter {
         this.timer = null
     }
 
-    send({ info = {}, data = {}, callback, overTime, failback }) {
+    sendToContent(sender, { info = {}, data = {}, callback, overTime, failback }) {
+        if (!info.messageId) {
+            info.messageId = `${info.actionType}-${guid()}` // 唯一的ID,用于标记回调函数
+        }
+        try {
+            chrome.tabs.sendMessage(sender.tab.id, {
+                info,
+                data
+            })
+
+            if (info.messageId && callback) {
+                // 带回调callback 的message, 要求携带messageId,callback,failback等
+                this.listen(info.messageId, callback)
+            }
+            if (failback) {
+                this.addFailback(info.messageId, overTime, failback)
+            }
+
+        } catch (error) {
+            failback({
+                error: 2,
+                msg: String(error)
+            })
+        }
+    }
+
+    sendToSW({ info = {}, data = {}, callback, overTime, failback }) {
         if (!info.messageId) {
             info.messageId = `${info.actionType}-${guid()}` // 唯一的ID,用于标记回调函数
         }
@@ -98,6 +124,6 @@ class MessageCenter {
 }
 
 // messageCenter在页面内实例化一次
-const messageCenter = new MessageCenter();
+const chromeMessageCenter = new ChromeMessageCenter();
 
-export default messageCenter;
+export default chromeMessageCenter;

+ 3 - 3
src/uilts/messageCenter/content/index.js

@@ -1,4 +1,4 @@
-class MessageCenter {
+class ContentMessageCenter {
     constructor() {
         this.iframeMap = new Map();
         this.messageCallbackMap = new Map();
@@ -55,6 +55,6 @@ class MessageCenter {
     // }
 }
 
-const messageCenter = new MessageCenter();
+const contentMessageCenter = new ContentMessageCenter();
 
-export default messageCenter;
+export default contentMessageCenter;

+ 4 - 4
src/uilts/messageCenter/iframe/index.js

@@ -1,6 +1,6 @@
 import { guid } from '@/uilts/help'
 //  iframe 通信中心
-class MessageCenter {
+class IframeMessageCenter {
     constructor() {
         //  缓存事件队列
         this.messageCallbackMap = new Map();
@@ -41,7 +41,7 @@ class MessageCenter {
 
     init() {
         window.addEventListener('message', (e) => {
-            const { info, data } = e.data;
+            let { info = {}, data = {} } = e.data;
             // 序列删除 失败回调
             this.messageFailbackMap.delete(info.messageId);
 
@@ -88,6 +88,6 @@ class MessageCenter {
 }
 
 // messageCenter在每个iframe内实例化一次
-const messageCenter = new MessageCenter();
+const iframeMessageCenter = new IframeMessageCenter();
 
-export default messageCenter;
+export default iframeMessageCenter;