您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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.4 // @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 { const evt = new Event('mouseenter'); //console.log("dispatcho evento"); wrapper.dispatchEvent(evt); } } /*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); })();