Skip to content

Instantly share code, notes, and snippets.

@shuhaowu
Last active August 16, 2016 04:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shuhaowu/f62a5380d79b692f195583cf65d1e48d to your computer and use it in GitHub Desktop.
Save shuhaowu/f62a5380d79b692f195583cf65d1e48d to your computer and use it in GitHub Desktop.
Facebook Adblock for GreaseMonkey PoC
// To use this script:
// - For chrome, install https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en
// - For firefox, install https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/
// ==UserScript==
// @name Facebook AdBlock
// @namespace facebook_adblock
// @include https://www.facebook.com/
// @version 1
// @grant none
// ==/UserScript==
var rules = {
".uiStreamSponsoredLink!parentNode(elem, 16)": function(elem) {
return elem.classList.contains("userContentWrapper");
},
".uiStreamSponsoredLink!parentNode(elem, 15)": function(elem) {
return elem.textContent.indexOf("Like Page") !== -1;
},
".uiStreamSponsoredLink!parentNode(elem, 11)": function(elem) {
return elem.classList.contains("userContentWrapper");
},
};
function parentNode(element, n) {
while(n-- && element) {
element = element.parentNode;
}
return element;
}
window.killAdTimer = null;
function killAds() {
observer.disconnect();
for (var rule in rules) {
var splittedSelector = rule.split("!");
var elementSelector = splittedSelector[0];
var should_hide = splittedSelector[1];
var elements = document.querySelectorAll(elementSelector);
for (var i=0; i<elements.length; i++) {
var elem = elements[i];
var selectedElement = eval(should_hide);
if (rules[rule](selectedElement)) {
selectedElement.parentNode.removeChild(selectedElement);
}
}
}
window.killAdTimer = null;
observer.observe(document, {
subtree: true,
attributes: true
});
};
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var observer = new MutationObserver(function(mutations, observer) {
if (window.killAdTimer != null) {
return;
}
window.killAdTimer = window.setTimeout(killAds, 500);
});
observer.observe(document, {
subtree: true,
attributes: true
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment