Makes sponsored feeds invisible on facebook.com
目前為
// ==UserScript==
// @name Facebook no ads
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Makes sponsored feeds invisible on facebook.com
// @author Darmikon
// @match https://www.facebook.com/*
// @grant none
// ==/UserScript==
(function() {
let rootEl = 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 doHack = (feed) => {
// 1. Find this unique block inside the feed
const spanWithId = feed.querySelector('span[id]');
if(!spanWithId) return;
const spanChildren = spanWithId.children;
// 2. Check if the second child of spanWithId is not a DIV element
if(spanChildren && spanChildren.length) {
if(spanChildren[1]) {
// if(spanChildren[1].nodeName !== 'SPAN'){
// console.log(spanChildren[1].nodeName);
// }
return spanChildren[1].nodeName !== 'SPAN';
}
}
}
const findRoot = (cb) => {
const intervalId = setInterval(() => {
if(!rootEl) {
rootEl = document.querySelector('[role="feed"]');
} else {
clearInterval(intervalId);
cb();
}
}, 50);
}
const trimAds = () => {
const feeds = [].slice.call(rootEl.children || []).filter(child => {
return child.hasAttribute('data-pagelet');
});
feeds.forEach((feed, i) => {
try {
if(doHack(feed)) {
// console.log('killed', feed.querySelector('h4 span'));
feed.style.display = "none";
}
} catch (e) {}
});
}
const runAdsKiller = () => {
const throttleKill = throttle(trimAds, 50);
throttleKill();
window.addEventListener('scroll', throttleKill);
window.addEventListener('resize', throttleKill);
}
const init = () => {
findRoot(runAdsKiller);
}
init();
})();