Browse Source

Merge branch 'dev_1.0.5' into feature_220525_publish

A\An 2 years ago
parent
commit
ebd911faed
4 changed files with 141 additions and 24 deletions
  1. 1 1
      src/logic/background/twitter.js
  2. 96 2
      src/logic/content/ParseCard.js
  3. 41 20
      src/logic/content/twitter.js
  4. 3 1
      src/manifest.json

+ 1 - 1
src/logic/background/twitter.js

@@ -195,7 +195,7 @@ export function onInstalledUserSet() {
         // 无刷新插入js
         chrome.tabs.query({}, (tab) => {
             for (let i in tab) {
-                if (tab[i].url.indexOf('twitter.com') >= 0) {
+                if (tab[i].url.indexOf('twitter.com') >= 0 || tab[i].url.indexOf('facebook.com') >= 0) {
                     chrome.scripting.executeScript({
                         target: { tabId: tab[i].id },
                         files: ['js/content.js'],

+ 96 - 2
src/logic/content/ParseCard.js

@@ -11,6 +11,21 @@ import { getChromeStorage, setChromeStorage } from '@/uilts/chromeExtension.js'
 class ParseCard {
     constructor() {
 
+    }
+    parseFaceBookCard() {
+        let de_net_card = []
+        let arr_article = document.querySelectorAll('div[role="article"]') || []
+        let _html
+        for (let i in arr_article) {
+            _html = arr_article[i].innerHTML || ''
+            if (_html.includes('denetme.net') && !this.isHasIframeByFacebook(arr_article[i])) {
+                de_net_card.push({
+                    time: new Date().getTime(),
+                    dom: arr_article[i]
+                })
+            }
+        }
+        return de_net_card
     }
     parseAllDeNetCard() {
         let de_net_card = []
@@ -47,6 +62,43 @@ class ParseCard {
         }
         return { tweet_Id, short_url, dom_card }
     }
+    parseFaceBookParmas(dom_card) {
+        let tweet_Id = ''
+        let short_url = ''
+        let a_arr = dom_card.querySelectorAll('a[role="link"]') || []
+        a_arr = Array.from(a_arr).reverse()
+        for (let i in a_arr) {
+            // 获取推特id
+            if (a_arr[i].href.indexOf('facebook.com') > 0) {
+                let faceUrl = new URL(a_arr[i]);
+                let faceSearch = new URLSearchParams(faceUrl.search);
+                let faceJumpUrl = decodeURIComponent(faceSearch.get('u'));
+                if (faceJumpUrl !== 'null') {
+                    let urlArr = new URL(faceJumpUrl);
+                    let searchArr = new URLSearchParams(urlArr.search);
+                    if (!tweet_Id) {
+                        tweet_Id = searchArr.get('tweetId')
+                    }
+                    if (!short_url) {
+                        short_url = faceJumpUrl
+                    }
+                }
+            } else {
+                if (a_arr[i].href.indexOf('denetme.net') > 0 && !tweet_Id) {
+                    let urlArr = new URL(a_arr[i]);
+                    let searchArr = new URLSearchParams(urlArr.search);
+                    tweet_Id = searchArr.get('tweetId')
+                }
+                if (a_arr[i].href.indexOf('denetme.net') > 0 && !short_url) {
+                    short_url = a_arr[i].href
+                }
+            }
+            if (tweet_Id && short_url) {
+                break
+            }
+        }
+        return { tweet_Id, short_url, dom_card }
+    }
     hideCard() {
         if (dom.querySelector('iframe')) {
             return
@@ -63,6 +115,17 @@ class ParseCard {
         })
         return json_data
     }
+    parseFacebookCardParmas() {
+        let json_data = []
+        this.parseFaceBookCard().forEach((item) => {
+            let _obj = this.parseFaceBookParmas(item.dom)
+            if (_obj.tweet_Id && _obj.short_url && _obj.dom_card) {
+                _obj.time = item.time
+                json_data.push(_obj)
+            }
+        })
+        return json_data
+    }
     // 获取短链接和渲染卡片数据
     async getCardParmas(card_json_data) {
         let sort_link_data = await getChromeStorage('cardData') || []
@@ -118,11 +181,14 @@ class ParseCard {
         return _array
     }
 
-    createIframe(post_Id, tweet_Id) {
+    createIframe(post_Id, tweet_Id, if_center = false) {
         let _iframe = document.createElement('iframe')
         _iframe.id = post_Id
         _iframe.src = chrome.runtime.getURL('/iframe/red-packet.html') + `?postId=${post_Id}&tweetId=${tweet_Id}`;
-        _iframe.style.cssText = 'border: medium none; width:375px;min-height:500px;'
+        _iframe.style.cssText = 'border:medium none; width:375px; min-height:500px;'
+        if (if_center) {
+            _iframe.style.cssText = 'border:medium none; width:375px; min-height:500px; display:block; margin:auto;'
+        }
         return _iframe
     }
     isHasIframeByArticle(dom_card) {
@@ -174,6 +240,15 @@ class ParseCard {
         }
         return false
     }
+    isHasIframeByFacebook(dom_card) {
+        if (!dom_card || !dom_card.parentElement) {
+            return
+        }
+        if (dom_card.querySelector('iframe')) {
+            return true
+        }
+        return false
+    }
     replaceDOMRedPacket({ dom_card, tweet_Id, post_Id, time, short_url }) {
         if (!dom_card || !dom_card.parentElement) {
             return
@@ -208,5 +283,24 @@ class ParseCard {
         }
 
     }
+    replaceFacebookPacket({ dom_card, tweet_Id, short_url }) {
+        if (!dom_card || !dom_card.parentElement) {
+            return
+        }
+        let dom = dom_card.querySelector('div[id^=jsc_c_][class=l9j0dhe7]')
+            dom.style = 'min-height:500px'
+        if (dom) {
+            for (let i = 0; i < dom.childNodes.length; i++) {
+                if (dom.children[i].tagName.toLowerCase() != 'iframe') {
+                    dom.children[i].style.display = 'none'
+                }
+            }
+
+            let originUrl = new URL(short_url);
+            let post_Id = originUrl.pathname.slice(1);
+
+            dom.appendChild(this.createIframe(post_Id, tweet_Id, true))
+        }
+    }
 }
 export default new ParseCard()

+ 41 - 20
src/logic/content/twitter.js

@@ -588,19 +588,30 @@ function onChangePageMain(targetNode) {
 // 2.监听卡片是否可见
 // 3.如果可见了 去找
 
-function setIframeRedPacket() {
+function setIframeRedPacket(type = 'twitter') {
     // 获取所有卡片参数
-    let card_json_data = parseCard.parseAllDeNetCardParmas()
-    // 过滤出可以请求的短链接
-    parseCard.getCardParmas(card_json_data).then((res) => {
-        for (let i in res.has_post_Id_card_data) {
-            parseCard.replaceDOMRedPacket(res.has_post_Id_card_data[i])
-        }
-        if (res.need_net_short_url.length > 0) {
-            // 请求短链接
-            chrome.runtime.sendMessage({ actionType: "CONTENT_TWITTER_SHORT_LINK", data: "", arr_url: res.need_net_short_url }, () => { })
-        }
-    })
+    let card_json_data
+    switch(type) {
+        case 'facebook':
+            card_json_data = parseCard.parseFacebookCardParmas()
+            for (let i in card_json_data) {
+                parseCard.replaceFacebookPacket(card_json_data[i])
+            }
+            break;
+        default:
+            card_json_data = parseCard.parseAllDeNetCardParmas()
+            // 过滤出可以请求的短链接
+            parseCard.getCardParmas(card_json_data).then((res) => {
+                for (let i in res.has_post_Id_card_data) {
+                    parseCard.replaceDOMRedPacket(res.has_post_Id_card_data[i])
+                }
+                if (res.need_net_short_url.length > 0) {
+                    // 请求短链接
+                    chrome.runtime.sendMessage({ actionType: "CONTENT_TWITTER_SHORT_LINK", data: "", arr_url: res.need_net_short_url }, () => { })
+                }
+            })
+            break;
+    }
 }
 
 // 监听点击发推 按钮绑定事件
@@ -638,22 +649,23 @@ const createIframe = ({ url, tweet_Id }, callback) => {
 // 初始化
 export function init() {
     getDiscordAuthCode();
-    if (window.location.href.indexOf('twitter.com') < 0) {
+    let where = window.location.href.indexOf('twitter.com') < 0 && window.location.href.indexOf('facebook.com') < 0;
+    if (where) {
         return
     }
     twitterPinLogin();
     // 渲染dom
-    let targetNode = null
+    
     let timer = setInterval(() => {
-        targetNode = document.querySelector('main')
-        if (targetNode) {
+        let inTwitter = window.location.href.includes('twitter.com');
+        let inTwitterNode = document.querySelector('main');
+        let inFacebook = window.location.href.includes('facebook.com');
+        let inFacebookNode = document.querySelector('div[role="main"]');
+        if (inTwitter && inTwitterNode) {
             clearInterval(timer)
             setInterval(() => {
-                if (window.location.href.includes('twitter.com)')) {
-                    return
-                }
                 if (!main_observer) {
-                    onChangePageMain(targetNode)
+                    onChangePageMain(inTwitterNode)
                     changeQueueNum(1)
                 }
                 if (queue_num <= 0) {
@@ -663,6 +675,15 @@ export function init() {
                 checkHasDeBtn()
                 changeQueueNum(-1)
             }, 1000)
+        } else if (inFacebook && inFacebookNode) {
+            clearInterval(timer)
+            setInterval(() => {
+                if (!main_observer) {
+                    onChangePageMain(inFacebookNode)
+                    changeQueueNum(1)
+                }
+                setIframeRedPacket('facebook')
+            }, 1000)
         }
     }, 1000);
     renderDom();

+ 3 - 1
src/manifest.json

@@ -21,6 +21,7 @@
                 "https://*.twitter.com/*",
                 "https://twitter.com/*",
                 "https://www.facebook.com/*",
+                "https://facebook.com/*",
                 "*://testh5.denetme.net/*",
                 "*://h5.denetme.net/*",
                 "*://preh5.denetme.net/*"
@@ -34,7 +35,8 @@
     "host_permissions": [
         "*://*.twitter.com/*",
         "*://twitter.com/*",
-        "https://www.facebook.com/*",
+        "*://*.facebook.com/*",
+        "*://facebook.com/*",
         "*://testh5.denetme.net/*",
         "*://h5.denetme.net/*",
         "*://preh5.denetme.net/*"