Explorar o código

[bug][夺宝]

zhangwei %!s(int64=2) %!d(string=hai) anos
pai
achega
e589670f92

+ 5 - 0
src/entry/content.js

@@ -120,6 +120,11 @@ window.onmessage = (res) => {
             case 'IFRAME_GET_EXTENSION_STORGE_DATA':
                 getExtensionStorgeDataForIframe(res.data.data);
                 break;
+            case 'IFRAME_DO_TASK_CREATE_TWEET':
+                // 做任务
+                // 接受数据,sendmessage
+                console.log('IFRAME_DO_TASK_CREATE_TWEET', res)
+                break
         }
     }
 };

+ 16 - 8
src/logic/content/twitter.js

@@ -1341,10 +1341,12 @@ export function checkTwitterTaskState() {
         })
         // 点击取消
         clickByDataTestId(e, 'confirmationSheetCancel', () => {
+            console.log('DO_TASK1')
             chrome.runtime.sendMessage({ actionType: "DO_TASK", tweet_Id, task_type, task_data, task_done: false }, () => { })
         })
         // 点击 蒙层
         if (e.target && e.target.nextSibling && e.target.nextSibling.dataset && e.target.nextSibling.dataset.testid == 'confirmationSheetDialog') {
+            console.log('DO_TASK2')
             chrome.runtime.sendMessage({ actionType: "DO_TASK", tweet_Id, task_type, task_data, task_done: false }, () => { })
         }
     }, true)
@@ -1475,6 +1477,7 @@ const TwitterFollowAPI = (item, tweet_Id) => {
         }
         chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'follow', task_data, task_done: true }, () => { })
     }).catch(() => {
+        console.log('DO_TASK3')
         chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'follow', task_data, task_done: false }, () => { })
     })
 }
@@ -1507,6 +1510,7 @@ const TwitterRetweetAPI = (tweet_Id) => {
     }).then(() => {
         chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'retweet', task_data: '', task_done: true }, () => { })
     }).catch(() => {
+        console.log('DO0_TASK4')
         chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'retweet', task_data: '', task_done: false }, () => { })
     })
 }
@@ -1538,17 +1542,12 @@ const TwitterLikeAPI = (tweet_Id) => {
     }).then(() => {
         chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'like', task_data: '', task_done: true }, () => { })
     }).catch(() => {
+        console.log('DO_TASK5')
         chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'like', task_data: '', task_done: false }, () => { })
     })
 }
 
-let twitter_api_create_tweet_time = new Date().getTime()
 const TwitterApiCreateTweet = ({ text, tweet_Id }) => {
-    let now_time = new Date().getTime()
-    if (now_time - twitter_api_create_tweet_time < 1000) {
-        return
-    }
-    twitter_api_create_tweet_time = now_time
     let data = {
         queryId: "hC1nuE-2d1NX5LYBuuAvtQ",
         features: {
@@ -1595,13 +1594,22 @@ const TwitterApiCreateTweet = ({ text, tweet_Id }) => {
         },
     }).then(function (response) {
         console.log('TwitterApiCreateTweet1', response)
-        chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'createTweet', task_data: '', task_done: true, response })
+        sendChromeMessage('是', tweet_Id, response)
     }).catch(function (err) {
         console.log('TwitterApiCreateTweet2', err)
-        chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'createTweet', task_data: '', task_done: false })
+        sendChromeMessage('否', tweet_Id)
     });
 }
 
+const sendChromeMessage = (done, tweet_Id, response) => {
+    console.log('sendChromeMessage', done)
+    if (done == '是') {
+        chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'createTweet1', task_data: '', task_done: '是', response })
+    } else {
+        chrome.runtime.sendMessage({ actionType: "DO_TASK", do_type: 'api', tweet_Id, task_type: 'createTweet1', task_data: '', task_done: '否' })
+    }
+}
+
 const TwitterApiUserByScreenNameReq = (params) => {
     let { screen_name } = params || {};
     return axios.get(`https://twitter.com/i/api/graphql/mCbpQvZAw6zu_4PvuAUVVQ/UserByScreenName?variables=%7B%22screen_name%22%3A%22${screen_name}%22%2C%22withSafetyModeUserFields%22%3Atrue%2C%22withSuperFollowsUserFields%22%3Atrue%7D`, {

+ 6 - 0
src/uilts/denet.js

@@ -0,0 +1,6 @@
+import Content from '@/uilts/messageCenter/messageContent'
+
+let denet = {}
+denet.content = Content
+
+export default denet

+ 3 - 3
src/uilts/help.js

@@ -269,12 +269,12 @@ export function $(key, cache = true) {
   return _dom
 }
 
-export const getInnerIframeURL = (url) => { 
+export const getInnerIframeURL = (url) => {
   let iframeUrl = url;
   if (url.includes('?')) {
     iframeUrl += `&appVersionCode=${appVersionCode}`;
-  } else { 
+  } else {
     iframeUrl += `?appVersionCode=${appVersionCode}`;
   }
   return iframeUrl;
-}
+}

+ 61 - 27
src/uilts/messageCenter/index.js

@@ -1,50 +1,84 @@
-class MessageCenter { 
-    constructor() { 
-        this.iframeMap = new Map();
+//  iframe 通信中心
+class MessageCenter {
+    constructor() {
+        //  缓存事件队列
         this.messageCallbackMap = new Map();
-        // this.listen()
+        this.messageFailbackMap = new Map();
+        this.init()
     }
 
-    findIframeById(id) { 
-        let target = this.iframeMap.get(id);
-        if (!target) { 
-            target = document.getElementById(id)
-            this.iframeMap.set('id', target)
-        }
-        return target
-    }
-
-    send(id, actionType, data) {
-        const target = this.findIframeById(id);
-        target && target.contentWindow.postMessage({
+    send({ actionType, data, callback, overTime, failback }) {
+        window.parent.postMessage({
             actionType,
             data
-        }, '*')
+        }, '*');
+        if (data.messageID && callback) {
+            // 带回调callback 的message, 要求携带messageID,callback,failback等
+            this.listen(`${actionType}-${data.messageID}`, callback)
+            if (failback) {
+                this.addFailback(`${actionType}-${data.messageID}`, overTime, failback)
+            }
+        }
     }
 
-    // don't use
-    add(actionType, callback) {
+    listen(actionType, callback) {
         let activeQuene = this.messageCallbackMap.get(actionType);
         if (activeQuene?.length > 0) {
             activeQuene.push(callback)
-        } else { 
+        } else {
             this.messageCallbackMap.set(actionType, [callback])
         }
     }
-    // don't use
-    listen() { 
-        window.addEventListener('message', (e) => { 
+
+    addFailback(actionType, overTime = 2000, failback) {
+        let failbackQuene = this.messageFailbackMap.get(actionType);
+        if (failbackQuene && failbackQuene.failCallbackList) {
+            failbackQuene.failCallbackList.push(
+                failback
+            )
+        } else {
+            this.messageFailbackMap.set(actionType, {
+                time: new Date().getTime(),
+                overTime,
+                failCallbackList: [failback]
+            })
+        }
+    }
+
+    init() {
+        window.addEventListener('message', (e) => {
             const { actionType, data } = e.data;
-            console.log('get message in content ...', actionType, data)
-            const quene = this.messageCallbackMap.get(actionType) ||  [];
-            while (quene.length > 0) { 
-                let callback = quene.pop();
+            this.messageFailbackMap.delete(actionType);
+            const quene = this.messageCallbackMap.get(actionType) || [];
+            let index = 0;
+            while (index < quene.length) {
+                const callback = quene[index];
                 callback(data)
+                index++
             }
         })
+        setInterval(() => {
+            // 轮询查看有无超期的message信息
+            const now = new Date().getTime();
+            for (let item of this.messageFailbackMap.values()) {
+                if (now - item.time > item.overTime) {
+                    let index = 0;
+                    while (index < item.failCallbackList.length) {
+                        const callback = item.failCallbackList[index];
+                        callback({
+                            error: 0,
+                            msg: "message 超时错误"
+                        })
+                        index++
+                    }
+                }
+            }
+
+        }, 1000)
     }
 }
 
+// messageCenter在每个iframe内实例化一次
 const messageCenter = new MessageCenter();
 
 export default messageCenter;

+ 40 - 0
src/uilts/messageCenter/messageContent.js

@@ -0,0 +1,40 @@
+// class message  
+import messageCenter from '@/uilts/messageCenter';
+import MESSAGE_ENUM from "@/uilts/messageCenter/messageEnum";
+import { guid, iframeID } from '@/uilts/help.js'
+
+// content.createTweets('iframe') 
+
+// 做任务
+class doTask {
+    createTweet({ txt = '' }) {
+        return new Promise((res, rej) => {
+            messageCenter.send({
+                actionType: MESSAGE_ENUM.IFRAME_DO_TASK_CREATE_TWEET,
+                data: {
+                    iframeID,//用于告诉父窗口会传消息给哪个iframe 
+                    messageID: guid()// 唯一的ID,用于标记回调函数
+                },
+                info: {
+                    txt
+                },
+                callback: (data) => {
+                    res(data)
+                },
+                failback: (e) => {
+                    rej(e)
+                }
+            })
+        })
+        // console.log(window.parent.window.atest)
+        // window.postMessage({actionType: 'iframe_test', data: key})
+    }
+}
+
+
+
+export const Content = new class Content {
+    doTask() {
+        return new doTask()
+    }
+}

+ 25 - 0
src/uilts/messageCenter/messageEnum.js

@@ -0,0 +1,25 @@
+/** 向父窗口发送的事件定义 */
+const SEND_MESSAGE_ENUM = {
+    IFREME_TAB_GROUP_SET_IFRAME_HEIGHT: 'IFREME_TAB_GROUP_SET_IFRAME_HEIGHT',
+    /** group tab 内的列表项点击 */
+    IFRAME_PAGE_JUMP: 'IFRAME_PAGE_JUMP',
+    IFREME_TAB_GROUP_CONTENT_GET_NAV_TOP: 'IFREME_TAB_GROUP_CONTENT_GET_NAV_TOP',
+    /** 获取content的localstorge数据 */
+    IFRAME_GET_EXTENSION_STORGE_DATA: 'IFRAME_GET_EXTENSION_STORGE_DATA',
+
+    // ---- 做任务 ----
+    IFRAME_DO_TASK_CREATE_TWEET: 'IFRAME_DO_TASK_CREATE_TWEET'
+
+}
+
+/** 接收父窗口的事件定义 */
+const RECEIVE_MESSAGE_ENUM = {
+    /** 切换到group tab */
+    CONTENT_REFRESH_TAB_GROUP_LIST: 'CONTENT_REFRESH_TAB_GROUP_LIST',
+    /** group打开时,页面发生滚动 */
+    CONTENT_GROUP_LIST_SCROLL: 'CONTENT_GROUP_LIST_SCROLL',
+    CONTENT_SEND_GROUP_NAV_TOP: 'CONTENT_SEND_GROUP_NAV_TOP',
+    CONTENT_SYS_THEME_CHANGE: 'CONTENT_SYS_THEME_CHANGE'
+}
+
+export default { ...SEND_MESSAGE_ENUM, ...RECEIVE_MESSAGE_ENUM }

+ 26 - 29
src/view/iframe/treasure-hunt/cover.vue

@@ -78,7 +78,6 @@ chrome.storage.onChanged.addListener(changes => {
 })
 
 const toStart = (req) => {
-    console.log('toStart', req)
     treasureStart({
         params: {
             postId: state.postId || '',
@@ -88,7 +87,6 @@ const toStart = (req) => {
             guid: guid()
         }
     }).then((res) => {
-        console.log('toStart2', res)
         state.usersFollowStatusList = [];
         if (res.code == 0) {
             state.page = '开奖页'
@@ -106,7 +104,6 @@ const toStart = (req) => {
         }
 
     }).catch((error) => {
-        console.log('toStart3', error)
         console.error(error)
     })
 }
@@ -117,15 +114,17 @@ chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
             if (!req.task_type || state.tweetId != req.tweet_Id) {
                 return
             }
-
-            if (req.task_type == 'createTweet' && !req.task_done) {
+            console.log('DO_TASK', req)
+            if (req.task_type == 'createTweet1' && req.task_done == '否') {
+                console.log('createTweet1', req)
                 state.toast.txt = 'Seems something went wrong, please try again'
                 state.toast.show = true
                 state.toast.has_icon = false
                 setTimeout(() => {
                     state.toast.show = false
                 }, 2000)
-            } else if (req.task_type == 'createTweet' && req.task_done) {
+            } else if (req.task_type == 'createTweet1' && req.task_done == '是') {
+                console.log('createTweet2', req)
                 toStart(req);
                 getChromeStorage('userInfo', (_userInfo) => {
                     if (_userInfo) {
@@ -163,25 +162,28 @@ chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
 
                 if (req.type == 'pre_repost') {
                     // 发送埋点
-                    let list = getFollowStatus(req.data)
-                    log_pre_repost.names.forEach(item => {
-                        list.forEach((item2) => {
-                            if (item.name == item2.name) {
-                                if (item.type == 'invite') {
-                                    log_pre_repost.params.isFatherTwitterFans = item2.followed
-                                }
-                                if (item.type == 'post') {
-                                    log_pre_repost.params.isRootTwitterFans = item2.followed
-                                }
-                            }
-                        })
-                    })
-
+                    // let list = getFollowStatus(req.data)
+                    // log_pre_repost.names.forEach(item => {
+                    //     list.forEach((item2) => {
+                    //         if (item.name == item2.name) {
+                    //             if (item.type == 'invite') {
+                    //                 log_pre_repost.params.isFatherTwitterFans = item2.followed
+                    //             }
+                    //             if (item.type == 'post') {
+                    //                 log_pre_repost.params.isRootTwitterFans = item2.followed
+                    //             }
+                    //         }
+                    //     })
+                    // })
+
+                    // // 上报埋点
+                    // Report.reportLog(Object.assign({
+                    //     objectType: Report.objectType.preRepost,
+                    // }, log_pre_repost.params))
+                } else {
+                    state.usersFollowStatusList = getFollowStatus(req.data);
                     // 上报埋点
-                    Report.reportLog(Object.assign({
-                        objectType: Report.objectType.preRepost,
-                    }, log_pre_repost.params))
-
+                    // logPreRepost()
                     // 做任务
                     chrome.tabs.getCurrent((tab) => {
                         // // 一键三连
@@ -201,11 +203,6 @@ chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
                             }, task_type: 'like'
                         })
                     })
-
-                } else {
-                    state.usersFollowStatusList = getFollowStatus(req.data);
-                    // 上报埋点
-                    logPreRepost()
                 }
             }
             break;

+ 1 - 1
src/view/iframe/treasure-hunt/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <v-cover v-if="state.page == '封面页'"></v-cover>
+    <v-cover v-show="state.page == '封面页'"></v-cover>
     <v-invite v-if="state.page == '邀请页'"></v-invite>
     <v-result v-if="state.page == '开奖页'"></v-result>
     <open-box v-show="state.open_box.show"></open-box>