🎉 欢迎访问GreasyFork.Org 镜像站!本镜像站由公众号【爱吃馍】搭建,用于分享脚本。联系邮箱📮

Greasy fork 爱吃馍镜像

FB 預設使用所有留言

FB 預設開啟所有留言

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

// ==UserScript==
// @name         FB 預設使用所有留言
// @namespace    http://tampermonkey.net/
// @version      2.94
// @description  FB 預設開啟所有留言
// @description:zh-tw  FB 預設開啟所有留言
// @author       You
// @match        https://www.facebook.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=facebook.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';
    console.log("FB 預設開啟所有留言 開始作業")

    //this line is show the possible menu text, you can change to your language
    var checker1 = ["與星星一同傳送的留言", "即時留言", "最舊", "最相關", "最熱門留言", "最新"]

    //this line is show the possible menu text's under explain, you can change to your language
    var checker2 = ["顯示所有留言,從舊到新排序。", "留言出現在影片中的時候便會同步顯示。", "顯示所有留言,最舊的留言會顯示在最上方。", "顯示所有留言,包括可能是垃圾訊息的內容。", "顯示所有留言,包括可能是垃圾訊息的內容。最相關的留言會顯示在最上方。", "依時間順序顯示所有留言,包括可能是垃圾訊息的留言。","Show all comments, including potential spam."]

    //this line is show the possible menu text's under explain, you can change to your language
    var checker3 = ["顯示先前的留言", "檢視另", "查看"]

    //All messages
    var allMessage1 = ["所有留言","All comments"]

    //All messages are displayed with the latest message at the top.
    var allMessage2 = ["顯示所有留言,且最新的留言顯示在最上方。","Show all comments, including potential spam."]


    async function onMyEnter(event) {
        lastClickText="";
    }

    function allow(){
        return lastClickText=="最相關" || lastClickText=="最新動態" || lastClickText=="新貼文" || lastClickText==undefined;
    }
    var lastClickText="";
    async function onMyClick(event) {
        console.log(event.srcElement.innerText);
        lastClickText=event.srcElement.innerText;
        if(allow()) return;
        for (let t = 0; t < 2; t++) {
            console.log("click")
            let a, b
            let has = false
            let originAll = false
            await new Promise(r => setTimeout(r, 50));
            if(allow()) return;
            let timeOut = 0;
            let article = []
            while (!has) {
                a = document.querySelectorAll("i[data-visualcompletion]")
                let top = window.scrollTop
                for (let i = 0; i < a.length; i++) {
                    b = a[i];
                    if (b == null) continue;
                    if (b.getAttribute("fb_doac") == "true") {
                        //console.log("jump")
                        continue;
                    }
                    b.setAttribute("fb_doac", true);
                    b = b.parentElement.parentElement.parentElement;
                    if (getInnerDepth(b) > 5) continue;
                    let text = b.innerText
                    let isChecked = ckeck1(text, checker1)
                    let isNull = b.querySelector("[data-ad-preview]") == null && b.closest("[data-ad-preview]") == null
                    if (isChecked && isNull) {
                        b.click()
                        window.scrollTop = top
                        //b.innerText="-"+b.innerText
                        has = true
                        console.log("發現 所有留言的存在")
                    }
                    for (let iAll = 0; iAll < allMessage1.length; iAll++) {
                        if (text.indexOf(allMessage1[iAll]) != -1) {
                            has = true
                            break
                        }
                    }
                }
                await new Promise(r => setTimeout(r, 50));
                if(allow()) return;
                timeOut += 50
                if (timeOut > 5000) return;
            }
            if (!has) return
            //console.log(article)

            timeOut = 0

            let second = []
            while (has) {
                a = document.querySelectorAll("span:not([fb_doac]), div:not([fb_doac])")
                let top = window.scrollTop
                for (let i = 0; i < a.length; i++) {
                    b = a[i];
                    if (getInnerDepth(b) > 3) continue;
                    let text = b.innerText
                    let isChecked = ckeck1(text, checker2)
                    let isNull = b.querySelector("[data-ad-preview]") == null && b.closest("[data-ad-preview]") == null

                    let isAll2=false;
                    for (let iAll = 0; iAll < allMessage2.length; iAll++) {
                        if (text.indexOf(allMessage2[iAll]) != -1) {
                            isAll2 = true
                            break
                        }
                    }

                    if (isChecked && isNull) {
                        //console.log(b)
                        b.click()
                        window.scrollTop = top
                        //b.innerText="-"+b.innerText
                        //console.log("自動按所有留言")
                        has = false
                    }
                    else if (second == null &&isAll2 && isNull) {
                        second.push(b)
                    }
                }
                await new Promise(r => setTimeout(r, 100));
                if(allow()) return;
                timeOut += 50
                if (has && timeOut > 1000) {
                    if (second.length > 0) {
                        second.foreach(x => x.click())
                        window.scrollTop = top
                        has = false
                    }
                }
            }
            await new Promise(r => setTimeout(r, 50));
            if(allow()) return;

            timeOut = 0
            has = false
            while (!has) {
                let top = window.scrollTop
                for (let i = 0; i < article.length; i++) {
                    let item = article[i]
                    let c = item.querySelectorAll("span:not([fb_doac]), div:not([fb_doac])")
                    for (let j = 0; j < c.length; j++) {
                        b = c[j]
                        if (getInnerDepth(b) > 3) continue
                        let text = b.innerText
                        let isChecked = ckeck1(text, checker3)
                        //this line is show the possible menu text's under explain, you can change to your language
                        if (isChecked) {
                            b.click()
                            window.scrollTop = top
                            has = true
                        }
                    }
                }

                await new Promise(r => setTimeout(r, 50))
                if(allow()) return;
                timeOut += 100
                if (timeOut > 5000) break
            }
            await new Promise(r => setTimeout(r, 50))
            if(allow()) return;
        }
        //console.log("完成任務")
    }
    document.body.addEventListener('mousedown', onMyClick)
    document.body.addEventListener('mouseup', onMyEnter)

    function getInnerDepth(node, max = 10, now = 1) {
        if (now >= max) {
            return max
        }
        if (node.children.length) {
            let mm = 0
            for (let i = 0; i < node.children.length; i++) {
                let n = node.children[i]
                if (now + 1 >= max) return max
                let x = getInnerDepth(n, max, now + 1);
                if (x > mm) { mm = x }
                if (mm >= max) {
                    return max
                }
            }
            return 1 + mm;
        } else {
            return 1;
        }
    }
    var dic = {}
    function ckeck1(text, checker) {
        if (dic.hasOwnProperty(text)) {
            return dic[text]
        }
        for (let x = 0; x < checker.length; x++) {
            if (text.startsWith(checker[x])) {
                dic[text] = true
                return true
            }
        }
        dic[text] = false
        return false
    }
    function ckeck2(text, checker) {
        let isChecked = false
        for (let x = 0; x < checker.length; x++) {
            if (text.indexOf(checker[x]) != -1) {
                isChecked = true
                break
            }
        }
        return isChecked
    }
}
)();