Facebook remove suggested sponsored ads blocks

Remove suggested/sponsored blocks from Facebook

Verze ze dne 06. 10. 2024. Zobrazit nejnovější verzi.

// ==UserScript==
// @name Facebook remove suggested sponsored ads blocks
// @version 1.20.1
// @description Remove suggested/sponsored blocks from Facebook
// @author Sly_North
// @match https://www.facebook.com/*
// @exclude https://www.facebook.com/privacy/*
// @exclude https://www.facebook.com/settings/*
// @exclude https://www.facebook.com/marketplace/*
// @namespace https://greasyfork.org/en/users/759669-sly-north
// @license MIT
// @grant none
// @icon https://www.facebook.com/favicon.ico
// @run-at document-start
// ==/UserScript==

console.log('Start RemoveAllSponsored Facebook');

function getWholePost(e, maxParentHeightDiff = 150) {
  let parent = e.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
  let h = parent.getBoundingClientRect().height;
  while (h < 90) {
    parent = parent.parentElement;
    h = parent.getBoundingClientRect().height;
  }
  let h2 = 0;
  while (true) {
    if (!parent.parentElement) { console.warn('Err: element has no parent H=', parent.getBoundingClientRect().height); break; }
    h2 = parent.parentElement.getBoundingClientRect().height;
    if (h2 > 3000 || h2 - h > maxParentHeightDiff) break;
    parent = parent.parentElement;
    h = h2;
  }
  return parent;
}

function RemoveAllSponsored()
{
  setTimeout(RemoveAllSponsored, 750);
  
  // Remove top right corner ads
  for (let e of Array.from(document.getElementsByTagName('h3')).filter(e => e.innerText === 'Sponsored')) {
    e.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.innerHTML = "";
    console.log('- Removing Fb top right ads');
  }

  // Remove the "suggestion" posts
  if (document.URL.match(/facebook.com\/*(\?.*)*/)) {
    let maybeAds = Array.from(document.getElementsByTagName('a')).filter(e => {
      let br = e.getBoundingClientRect();
      return !e.style.display && br.left > window.innerWidth/2 && br.width > 100 && br.width < 200 && br.top > 100;
    });
    for (let e of maybeAds) {
      const parent = getWholePost(e);
      if (parent.innerText.match(/Create new account/)) continue;
      console.log('- Fb ads sponsored post: H=', parent.getBoundingClientRect().height, ' ', parent.innerText.replaceAll("\n"," ").replaceAll("Facebook Facebook ", ""), ' from ', e.innerText);
      e.style.display = "none";
      parent.style.display = "none";
    }
  }

	// Unwanted elements
  var elts = Array.from(document.getElementsByTagName('span'));
  elts = elts.filter((e) => {var br = e.getBoundingClientRect(); return !e.style.display && br.bottom >= 0 && br.top <= window.innerHeight + 1000 && !e.style.display});
  elts = elts.filter((e) => {
    var t = e.innerText;
    return t === 'Suggested for you' || t === 'Remember Password' || t === 'Reels and short videos' || t === 'Suggested for you' || t === 'People You May Know' ||
       t.match(/groups you might like/) || t.match(/groups suggested just for you/) || t === 'Follow' ;// || t === 'Join';
  });
  for (let e of elts) {
    const parent = getWholePost(e);
    if (parent.getBoundingClientRect().height > 1000) {
      // console.log(' - Fb ads/block: NOT removing tag=', e.tagName, ' H=', e.getBoundingClientRect().height, ' parent tag= ', parent.tagName, 'H=', parent.getBoundingClientRect().height, ' ', parent.innerText.replaceAll("\n", "  ").substring(0, 200));
      continue;
    }
    console.log('- Removing Fb ads/block tag= ', parent.tagName, 'H=', parent.getBoundingClientRect().height, ' ', parent.innerText.replaceAll("\n", "  ").replaceAll("Facebook ", "").substring(0, 200));
    e.style.display = "none";
    parent.style.display = "none";
  }
}

setTimeout(RemoveAllSponsored, 1000);