From e961faec29ccf620c308356bfe6bd68b9076a12b Mon Sep 17 00:00:00 2001 From: Jack Case Date: Tue, 21 Oct 2025 20:56:17 +0000 Subject: [PATCH] set up mutationobserver to react when more results load --- manifest.json | 4 ++-- scripts/hide-slop.js | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/manifest.json b/manifest.json index 17ae283..d89d4ed 100644 --- a/manifest.json +++ b/manifest.json @@ -9,7 +9,7 @@ "activeTab", "storage", "webNavigation", - "*://duckduckgo.com/*" + "*://*.duckduckgo.com/*" ], "page_action": { @@ -32,7 +32,7 @@ "content_scripts": [ { - "matches": ["*://duckduckgo.com/*"], + "matches": ["*://*.duckduckgo.com/*q=*"], "js": ["scripts/hide-slop.js"] } ] diff --git a/scripts/hide-slop.js b/scripts/hide-slop.js index 875a965..ea59153 100644 --- a/scripts/hide-slop.js +++ b/scripts/hide-slop.js @@ -1,3 +1,10 @@ +const ddg_result_selector = "a[data-testid=\"result-title-a\"" +const ddg_result_list_selector = "ol.react-results--main" + +let result_list_node +let result_list_observer +const page_links = new Map() + function check_links(links) { // send a message to background script with a list of URLs to check browser.runtime.sendMessage({type: "check", urls: links}) @@ -6,19 +13,43 @@ function check_links(links) { async function message_listener(message) { if(message.type === "check_result") { console.log(message.url, message.result) + page_links.set(message.url, message.result) } } -function onload_handler() { +function get_initial_links() { //get links - const links = document.querySelectorAll("a[data-testid=\"result-title-a\"") - let link_targets = new Array() + const links = document.querySelectorAll(ddg_result_selector) links.forEach((node) => { - link_targets.push(node.getAttribute("href")) + page_links.set(node.getAttribute("href"), undefined) }) console.log(link_targets) - check_links(link_targets) + check_links(page_links.keys()) +} + +function update_links() { + // the result list has updated, add new links and check them +} + +function setup_result_observer() { + const config = { childList: true } + result_list_observer = new MutationObserver(update_links) + result_list_observer.observe(result_list_node, config) +} + +function onload_handler() { + // get results ol node + result_list_node = document.querySelector(ddg_result_list_selector) + + setup_result_observer() + + get_initial_links() } browser.runtime.onMessage.addListener(message_listener) -addEventListener("DOMContentLoaded", onload_handler) \ No newline at end of file + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", onload_handler) +} else { + onload_handler() +}