您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Makes sponsored feeds invisible on facebook.com
// ==UserScript== // @name Facebook no ads // @namespace http://tampermonkey.net/ // @version 2.0 // @description Makes sponsored feeds invisible on facebook.com // @author Darmikon // @match https://www.facebook.com/* // @grant none // @license MIT // ==/UserScript== (function() { let rootEl = null; let intervalId = null; let prevUrl = null; let page = null; const throttle = (func, limit) => { let inThrottle; return function() { const args = arguments; const context = this; if (!inThrottle) { func.apply(context, args); inThrottle = true; setTimeout(() => { inThrottle = false; }, limit); } } } const onUrlChange = (cb) => { setInterval(() => { if(location.href !== prevUrl) { prevUrl = location.href; cb(); } }, 50); } const doHack = (feed) => { // 0. Alternatively find a block with aria-label const aWithLabel = feed.querySelector('[aria-label="Sponsored"]'); if(aWithLabel) { return true; } // 1. Find this unique block inside the feed const spanWithId = feed.querySelector('span[id]'); if(!spanWithId) return; const link = spanWithId.querySelector('a'); const spanWithSponsoredText = link?.firstElementChild?.firstElementChild?.firstElementChild; let isSponsored = false; if(spanWithSponsoredText) { let labels = [].slice.call(spanWithSponsoredText.querySelectorAll('span')).filter(el => { const styles = getComputedStyle(el); return styles.position === 'relative' && styles.display !== 'none'; }).map(el => el.innerText); let word = labels.join(''); // console.log(word); if(word.includes('ponsored')) { isSponsored = true; } } return isSponsored; } const trimAds = () => { let feeds; if(page === 'home') { feeds = [].slice.call(rootEl.children || []).filter(child => { return child.hasAttribute('data-pagelet'); }); } if(page === 'watch') { feeds = [].slice.call((((rootEl.firstElementChild || {}).firstElementChild || {}).firstElementChild || {}).children || []); } feeds.forEach((feed, i) => { try { if(doHack(feed)) { // console.log('killed', feed.querySelector('h4')); feed.style.display = "none"; } } catch (e) {} }); } const trimAdsForRoot = () => { rootEl = null; if(intervalId) { clearInterval(intervalId); } intervalId = setInterval(() => { if(!rootEl) { const home = document.querySelector('[role="feed"]'); const watch = document.querySelector('[data-pagelet="MainFeed"]'); if(home) { page = 'home'; } if(watch) { page = 'watch'; } rootEl = home || watch; } else { clearInterval(intervalId); trimAds(); } }, 50); } const runAdsKiller = () => { const throttleKill = throttle(trimAdsForRoot, 50); trimAdsForRoot(); window.addEventListener('scroll', trimAdsForRoot); window.addEventListener('resize', trimAdsForRoot); onUrlChange(trimAdsForRoot); } const init = () => { runAdsKiller(); } init(); })();