From ca1b32e0c33c04200f61c5ced7fbe6e732916f53 Mon Sep 17 00:00:00 2001 From: wanhose Date: Sun, 4 Apr 2021 14:17:37 +0200 Subject: [PATCH] feat(scripts): improve content scripts --- src/scripts/content.js | 55 +++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/src/scripts/content.js b/src/scripts/content.js index 199c139..f9934f9 100644 --- a/src/scripts/content.js +++ b/src/scripts/content.js @@ -1,3 +1,4 @@ +let attempts = 1; let elements = []; const fix = () => { @@ -8,7 +9,14 @@ const fix = () => { body.style.setProperty("overflow-y", "unset", "important"); }; -const retrieveElement = (match) => { +const observe = () => { + observer.observe(document.body, { + attributes: true, + childList: true, + }); +}; + +const search = (match) => { if (!match.includes("[") && !match.includes(">")) { if (match.startsWith(".")) { return document.getElementsByClassName(match.slice(1))[0]; @@ -24,40 +32,37 @@ const retrieveElement = (match) => { return null; }; -const observe = () => { - observer.observe(document.body, { - attributes: true, - childList: true, - }); -}; - const remove = () => { for (let i = elements.length; i--; ) { const match = elements[i]; - const element = retrieveElement(match); - const tagName = element ? element.tagName.toUpperCase() : ""; + const element = search(match); - if (element && !["BODY", "HTML"].includes(tagName)) { - element.remove(); + if (element) { + const tagName = element.tagName.toUpperCase(); + + if (!["BODY", "HTML"].includes(tagName)) element.remove(); } } }; const observer = new MutationObserver((_, instance) => { - instance.disconnect(); + if (attempts <= 5) { + attempts += 1; + instance.disconnect(); + fix(); + remove(); + observe(); + } +}); + +(async () => { + const url = chrome.runtime.getURL("data/elements.txt"); + const db = await fetch(url).then((res) => res.text()); + elements = db.split("\n"); +})(); + +document.addEventListener("DOMContentLoaded", () => { fix(); remove(); observe(); }); - -(async () => { - const url = chrome.runtime.getURL("elements/index.txt"); - const db = await fetch(url).then((res) => res.text()); - elements = db.split("\n"); - - document.addEventListener("DOMContentLoaded", () => { - fix(); - remove(); - observe(); - }); -})();