Block Facebook Posts with Follow or Join (CSP Safe)

Block posts on Facebook newsfeed that have Follow or Join buttons, bypassing CSP restrictions.

29.09.2024 itibariyledir. En son verisyonu görün.

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

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

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==UserScript==
// @name         Block Facebook Posts with Follow or Join (CSP Safe)
// @namespace    http://github.com/sarahbarberuk
// @version      1.2
// @description  Block posts on Facebook newsfeed that have Follow or Join buttons, bypassing CSP restrictions.
// @author       Sarah Barber
// @match        https://www.facebook.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
        // Function to find the nearest parent div with exactly one class
        function findNearestParentWithOneClass(element) {
            let parent = element.closest('div');
            while (parent) {
                if (parent.classList.length === 1) {
                    return parent; // Found the div with exactly one class
                }
                parent = parent.parentElement.closest('div'); // Move to the next parent div
            }
            return null; // Return null if no such div is found
        }

        // Function to block posts with "Follow" or "Join" buttons
        function blockPostsWithFollowOrJoin() {
            // Get the main newsfeed div
            const mainDiv = document.querySelector('div[role="main"]');
            if (!mainDiv) return;

            // Get all div elements with role="button" inside the main div
            const buttons = mainDiv.querySelectorAll('div[role="button"]');

            // Loop through each button and check if it contains "Follow" or "Join"
            buttons.forEach(button => {
                const innerSpan = button.querySelector('span');

                if (innerSpan && (span.innerText === 'Follow' || innerSpan .innerText === 'Join')) {
                    // Find the nearest parent div with exactly one class and hide it
                    const postContainer = findNearestParentWithOneClass(button);
                    if (postContainer) {
                        postContainer.style.display = 'none';
                        console.log('Blocked post with:', innerSpan .innerText, postContainer);
                    }
                }

                // this bit blocks reels and short videos
                const innerDiv = button.querySelector('div');
                if (innerDiv) {
                    const span =  innerDiv.querySelector('span');

                    if (span && (span.innerText === 'Reels and short videos')) {
                        // Find the nearest parent div with exactly one class and hide it
                        const postContainer = findNearestParentWithOneClass(button);
                        if (postContainer) {
                            postContainer.style.display = 'none';
                            console.log('Blocked post with:', span.innerText, postContainer);
                        }
                    }
                }  

                   
            });
        }

        // Run the script periodically to catch new posts
        const observer = new MutationObserver(blockPostsWithFollowOrJoin);
        observer.observe(document.body, { childList: true, subtree: true });


})();