From 7898cf95bfcab5cab9a460cb371069e111574af3 Mon Sep 17 00:00:00 2001 From: wanhose Date: Sun, 14 Aug 2022 12:57:38 +0200 Subject: [PATCH 1/3] feat(browser-extension): content script performance improvements --- .../browser-extension/src/scripts/content.js | 68 ++++++++++++++----- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/packages/browser-extension/src/scripts/content.js b/packages/browser-extension/src/scripts/content.js index ba7dd94..18cba8d 100644 --- a/packages/browser-extension/src/scripts/content.js +++ b/packages/browser-extension/src/scripts/content.js @@ -31,6 +31,13 @@ const options = { childList: true, subtree: true }; const preview = hostname.startsWith('consent.') || hostname.startsWith('myprivacy.'); +/** + * @description Element that were being removed count + * @type {number} + */ + +let elementCount = 0; + /** * @description Extension state * @type {{ enabled: boolean }} @@ -38,6 +45,40 @@ const preview = hostname.startsWith('consent.') || hostname.startsWith('myprivac let state = { enabled: true }; +/** + * @description Cleans DOM + * @param {Element[]} nodes + * @param {boolean?} skipMatch + * @returns {void} + */ + +const clean = (nodes, skipMatch) => { + const targets = nodes.filter((node) => skipMatch || match(node)); + + targets.forEach((node) => { + console.log(node); + node.remove(); + elementCount += 1; + }); +}; + +/** + * @description Cleans DOM + * @returns {void} + */ + +const forceClean = () => { + if (data?.elements.length && state.enabled && !preview) { + const nodes = [...document.querySelectorAll(data.elements)]; + + if (nodes.length) { + fix(); + clean(nodes, true); + elementCount += nodes.length; + } + } +}; + /** * @description Matches if node element is removable * @param {Element} node @@ -60,16 +101,6 @@ const match = (node) => { ); }; -/** - * @description Cleans DOM - * @param {Element[]} nodes - * @param {boolean?} skipMatch - * @returns {void} - */ - -const clean = (nodes, skipMatch) => - nodes.filter((node) => skipMatch || match(node)).forEach((node) => node.remove()); - /** * @description Fixes scroll issues */ @@ -130,18 +161,21 @@ const observer = new MutationObserver((mutations) => { }); /** - * @async + * @description Fixes already existing element when page load issues + * @listens window#load + */ + +window.addEventListener('load', () => { + if (elementCount < 2) forceClean(); +}); + +/** * @description Fixes bfcache issues * @listens window#pageshow */ window.addEventListener('pageshow', (event) => { - if (data?.elements.length && event.persisted && state.enabled && !preview) { - const nodes = [...document.querySelectorAll(data.elements)]; - - fix(); - if (nodes.length) clean(nodes, true); - } + if (event.persisted) forceClean(); }); /** From 85c6315bf49454b5663fc0fa8e128c37893facfc Mon Sep 17 00:00:00 2001 From: wanhose Date: Sun, 14 Aug 2022 12:57:52 +0200 Subject: [PATCH 2/3] chore(browser-extension): upgrade version --- packages/browser-extension/src/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/browser-extension/src/manifest.json b/packages/browser-extension/src/manifest.json index f464a51..cc6a785 100644 --- a/packages/browser-extension/src/manifest.json +++ b/packages/browser-extension/src/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Cookie Dialog Monster", - "version": "6.0.2", + "version": "6.0.3", "default_locale": "en", "description": "__MSG_appDesc__", "icons": { From b06277b4d8546284d9a389eadae0428221ae9205 Mon Sep 17 00:00:00 2001 From: wanhose Date: Wed, 17 Aug 2022 23:19:44 +0200 Subject: [PATCH 3/3] refactor(browser-extension): drop console statements --- packages/browser-extension/src/scripts/content.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/browser-extension/src/scripts/content.js b/packages/browser-extension/src/scripts/content.js index 18cba8d..2ec0a71 100644 --- a/packages/browser-extension/src/scripts/content.js +++ b/packages/browser-extension/src/scripts/content.js @@ -56,7 +56,6 @@ const clean = (nodes, skipMatch) => { const targets = nodes.filter((node) => skipMatch || match(node)); targets.forEach((node) => { - console.log(node); node.remove(); elementCount += 1; });