Removes ads (a.k.a. sponsored posts) from feed and sidebar
当前为
// ==UserScript==
// @name Facebook Hide Ads (a.k.a. sponsored posts)
// @namespace https://openuserjs.org/users/burn
// @version 0.3
// @description Removes ads (a.k.a. sponsored posts) from feed and sidebar
// @author burn
// @copyright 2020, burn (https://openuserjs.org/users/burn)
// @license MIT
// @match https://www.facebook.com/*
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
let qS = function (el, scope) {
scope = (typeof scope == 'object') ? scope : document;
return scope.querySelector(el) || false;
},
qSall = function (els, scope) {
scope = (typeof scope == 'object') ? scope : document;
return scope.querySelectorAll(els) || false;
},
targetNode = qS('body'),
observerConfig = {
attributes: false,
childList: true,
subtree: true
},
getParentEl = function(elmChild) {
return elmChild.closest('[data-pagelet^="FeedUnit_"]') || false;
},
isFound = false,
removeAdsInFeed = function(ads) {
Array.prototype.forEach.call(ads, function(el) {
let wrapper = getParentEl(el);
if (wrapper !== false) {
//console.log("Found wrapper for " + el);
if (wrapper.parentNode != null)
wrapper.parentNode.removeChild(wrapper);
} /*else {
console.log("Can not find parent element");
}*/
});
},
removeAbsoluteSpans = function(elm) {
Array.prototype.forEach.call(qSall('span[style="position: absolute; top: 3em;"]', elm), function(el) {
el.parentNode.removeChild(el);
});
},
callback = function (mutationsList, observer) {
mutationsList.forEach(function (mutation) {
var entry = {
mutation: mutation,
el: mutation.target,
value: mutation.target.textContent,
oldValue: mutation.oldValue
};
removeAbsoluteSpans(entry.el);
// ads in right sidebar, old fb design
let ego_wrapper = qS('#pagelet_ego_pane', entry.el);
if (ego_wrapper) ego_wrapper.parentNode.removeChild(ego_wrapper);
/* new fb 2020 design */
if (entry.value.indexOf("Sponsored") >= 0) {
//console.log("sponsored found for " + entry.el);
removeAdsInFeed([entry.el]);
}
});
};
removeAbsoluteSpans(qS('body'));
// ads in right sidebar, old fb design
let ego_wrapper = qS('#pagelet_ego_pane');
if (ego_wrapper) ego_wrapper.parentNode.removeChild(ego_wrapper);
var observer = new MutationObserver(callback);
observer.observe(targetNode, observerConfig);
})();