Last active
February 26, 2018 15:17
-
-
Save fdebijl/46f79734e9e8d5d3cea290d2eaffdc48 to your computer and use it in GitHub Desktop.
ProPublica - content.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Reclame's in de tijdlijn zelf hebben deze klasse | |
const TIMELINE_SELECTOR = ".userContentWrapper"; | |
// Reclame's in de sidebar krijgen deze klasse | |
const SIDEBAR_SELECTOR = ".ego_unit"; | |
// Deze functie wordt elke vijf seconden uitgevoerd om alle reclames op de | |
// pagina te versturen naar het achtergrondscript (later meer uitleg hierover) | |
const sendAds = function() { | |
let posts = Array.from(document.querySelectorAll(SIDEBAR_SELECTOR)).concat( | |
Array.from(document.querySelectorAll(TIMELINE_SELECTOR)) | |
); | |
// De resultaten van de verwerkingsfunctie worden later in deze variabele gestopt | |
let results = []; | |
// Verzamel alle elementen die reclame kunnen zijn en stuur ze naar de advertentiechecker (parser()) | |
let scraper = posts.reduce( | |
(p, i) => | |
p.then(() => { | |
// Zet een timer voor de advertentiecheck - deze mag maximaal vijf seconden duren | |
let timeout = new Promise(resolve => | |
setTimeout(() => resolve(false), 5000) | |
); | |
// Kijk of het element (i) een advertentie is, als dat het geval is dan wordt | |
// deze toegevoegd aan de resultaten (results) | |
return Promise.race([ | |
parser(i).then(it => results.push(it), e => console.log(e)), | |
timeout | |
]); | |
}), | |
Promise.resolve(null) | |
); | |
// Stuur de reclames naar het achtergrondscript zodra de scraper klaar is | |
scraper.then(() => { | |
chrome.runtime.sendMessage(results.filter(i => i)); | |
}); | |
}; | |
// Let op veranderingen aan de pagina, als deze plaatsvinden voer | |
// dan bovenstaande functie uit (maximaal eens per vijf seconden) | |
let a = new MutationObserver(debounce(sendAds, 5000)); | |
a.observe(document.body, { childList: true, subtree: true }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment