소스 검색

[edit][优化轮循卡片]

zhangwei 3 년 전
부모
커밋
481d9f7f14
3개의 변경된 파일65개의 추가작업 그리고 41개의 파일을 삭제
  1. 7 6
      src/entry/background.js
  2. 19 6
      src/entry/content.js
  3. 39 29
      src/logic/twitter.js

+ 7 - 6
src/entry/background.js

@@ -107,12 +107,13 @@ chrome.runtime.onConnect.addListener(function (port) {
                 backTwitterPinLoginToken();
                 break;
             case "CONTENT_TWITTER_SHORT_LINK":
-                backHttpTwitterShortUrl(res.url).then((item) => {
-                    port.postMessage({
-                        state: "BACK_TWITTER_SHORT_LINK",
-                        post_id: item.post_id,
-                        tweet_id: res.tweet_id
-                    });
+                
+                backHttpTwitterShortUrl(res.url,res.tweet_id).then((item) => {
+                    // port.postMessage({
+                    //     state: "BACK_TWITTER_SHORT_LINK",
+                    //     post_id: item.post_id,
+                    //     tweet_id: res.tweet_id
+                    // });
                 })
                 break
         }

+ 19 - 6
src/entry/content.js

@@ -23,11 +23,13 @@ port.onMessage.addListener(function (res) {
         case "BACK_TWITTER_LOGIN_SUCCESS":
             showGiveDialogHandler();
             break;
-        case "BACK_TWITTER_SHORT_LINK":
-            if (bindTwitterArt.needBind) {
-                bindTwitterArtMethod({ postId: res.post_id , twitterId: res.tweet_id });
-            }
-            break
+        // case "BACK_TWITTER_SHORT_LINK":
+            // console.log('BACK_TWITTER_SHORT_LINK', res)
+            // console.log('needBind', bindTwitterArt.needBind)
+            // if (bindTwitterArt.needBind) {
+            //     bindTwitterArtMethod({ postId: res.post_id, twitterId: res.tweet_id });
+            // }
+            // break
     }
 });
 
@@ -38,6 +40,14 @@ chrome.storage.onChanged.addListener(changes => {
             init()
         }
     }
+    if (bindTwitterArt.needBind) {
+        let item = JSON.parse(changes.sortLink.newValue)
+        for (let i in item) {
+            if (item[i].tweet_id) {
+                bindTwitterArtMethod({ postId: item[i].post_id, twitterId: item[i].tweet_id });
+            }
+        }
+    }
 })
 
 window.onload = () => {
@@ -93,9 +103,12 @@ window.onmessage = (res) => {
 
 chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
     sendResponse('');
-    switch(req.actionType) {
+    switch (req.actionType) {
         case 'BG_SHOW_PIN_TIPS':
             showPinTips()
             break;
+        // case 'BACK_TWITTER_SHORT_LINK':
+        //     console.log('BACK_TWITTER_SHORT_LINK')
+        //     break
     }
 })

+ 39 - 29
src/logic/twitter.js

@@ -67,9 +67,9 @@ export function backTwitterPinLoginCode(code) {
 
 }
 
-export function backHttpTwitterShortUrl(url) {
+export function backHttpTwitterShortUrl(url,tweet_id) {
     return new Promise(function (resolve, reject) {
-
+        console.log('请求一次短链接')
         httpTwitterShortUrl(url).then(res => {
             let _str_arr = res.match(/denetme.net\/([\s\S]*?)"/) || []
             let _post_id = _str_arr[1] || ''
@@ -79,13 +79,16 @@ export function backHttpTwitterShortUrl(url) {
             // 解析
             let _obj = {
                 url,
-                post_id: _post_id
+                post_id: _post_id,
+                tweet_id
             }
             getChromeStorage('sortLink', item => {
                 if (item) {
                     for (let i in item) {
                         if (item[i].url == _obj.url) {
                             item[i] = _obj
+                        }else{
+                            delete item[i].tweet_id
                         }
                     }
                     setChromeStorage({ sortLink: JSON.stringify(item) })
@@ -615,12 +618,12 @@ function parseDOMRedPacket() {
 let parse_dom = {}
 
 async function parseDOMRedPacketByShortUrl(port) {
-    let _new_time = new Date().getTime()
-    if ((_new_time - change_time) > 1000) {
-        change_time = _new_time
-    } else {
-        return
-    }
+    // let _new_time = new Date().getTime()
+    // if ((_new_time - change_time) > 1000) {
+    //     change_time = _new_time
+    // } else {
+    //     return
+    // }
     // 为了减少声明变量次数
     parse_dom.dom = null
     parse_dom.txt_area = null
@@ -640,6 +643,9 @@ async function parseDOMRedPacketByShortUrl(port) {
                 parse_dom.dom.style.display = 'none'
                 continue
             }
+            if (parse_dom.dom.parentElement.querySelector('iframe')) {
+                continue
+            }
             parse_dom.short_url = getTwitterShortUrl(parse_dom.article)
             parse_dom.a_tweetId = parse_dom.article.querySelector('a[aria-label]')
             if (parse_dom.a_tweetId && parse_dom.a_tweetId.getAttribute('href')) {
@@ -753,15 +759,17 @@ function replaceDOMRedPacket(_type, _dom, postId, tweetId) {
     }
 }
 
-let change_time = new Date().getTime()
-// function onChangePageMain(port, targetNode) {
-//     const config = { attributes: true, childList: true, subtree: true };
-//     const callback = (mutationsList, observer) => {
-//         parseDOMRedPacketByShortUrl(port)
-//     }
-//     const observer = new MutationObserver(callback);
-//     observer.observe(targetNode, config);
-// }
+// let change_time = new Date().getTime()
+function onChangePageMain(port, targetNode) {
+    const config = { attributes: true, childList: true, subtree: true };
+    const callback = (mutationsList, observer) => {
+        setTimeout(()=>{
+            parseDOMRedPacketByShortUrl(port)
+        },1500)
+    }
+    const observer = new MutationObserver(callback);
+    observer.observe(targetNode, config);
+}
 
 export function setIframeRedPacket(port) {
     // let elment = document.documentElement
@@ -769,15 +777,17 @@ export function setIframeRedPacket(port) {
     if (window.location.href.includes('twitter.com)')) {
         return
     }
-    setInterval(() => {
-        parseDOMRedPacketByShortUrl(port)
-    }, 2000)
-    // let targetNode = null
-    // let timer = setInterval(() => {
-    //     targetNode = document.querySelector('main')
-    //     if (targetNode) {
-    //         clearInterval(timer)
-    //         onChangePageMain(port, targetNode)
-    //     }
-    // }, 1000);
+    // setInterval(() => {
+    //     // parseDOMRedPacketByShortUrl(port)
+    // }, 1000)
+
+
+    let targetNode = null
+    let timer = setInterval(() => {
+        targetNode = document.querySelector('main')
+        if (targetNode) {
+            clearInterval(timer)
+            onChangePageMain(port, targetNode)
+        }
+    }, 1000);
 }