[GM] Google-Search Track Link Remover (listed) 08.07.2022 11:04:56 (136 lines) [Edit] [Raw] [View]

// ==UserScript== // @name Google-Search Track Link Remover // @version 2.0 // @grant none // @include ://www.google./search* // ==/UserScript==

setTimeout(function(){ console.log("Applying Track Link Remover"); let counter = 0;

let searchResultsContainer = getElementByXPath("//*[@id='search']/div[./h1]/div"); if (searchResultsContainer == null) { console.warn("Search Results Container not found"); } else { let seachLinks = getElementsByXPath(".//div//a[not(@href='') and ./h3]", searchResultsContainer); seachLinks.forEach(elem => { elem.addEventListener("click", e => { e.preventDefault(); let url = getUrlFromElement(elem); console.log("Left-Click intercepted: " + url); document.location.href = url; }); elem.addEventListener("auxclick", e => { e.preventDefault(); let url = getUrlFromElement(elem); console.log("Middle-Mouse intercepted: " + url); window.open(url, "_blank"); }); counter++; });

console.log("Patched " + counter + " links");

}

let searchBarBackground = getElementByXPath("//form[@action='/search']//div[contains(@class, 'logo')]/following-sibling::div[.//input]"); if (counter > 0) { searchBarBackground.style.backgroundColor = "#c9ffc940"; } else { searchBarBackground.style.backgroundColor = "#ffc9c940"; }

}, 1000);

function getUrlFromElement(elem) { if (typeof elem != "object") return elem; if (typeof elem.href != "string" || !elem.href.startsWith("https://www.google.com/url")) return elem.href; try { let trackingUrl = new URL(elem.href); let cleanUrl = trackingUrl.searchParams.get("url"); return cleanUrl; } catch (err) { return elem.href; } }

function getElementByXPath(path, root) { return document.evaluate(path, root || document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; }

function getElementsByXPath(xpath, parent) { let results = []; let query = document.evaluate(xpath, parent || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (let i = 0, length = query.snapshotLength; i < length; ++i) { results.push(query.snapshotItem(i)); } return results; }

/*

PREVIOUS VERSION

// ==UserScript== // @name Google-Search Track Link Remover // @version 1 // @grant none // @include ://www.google./search* // ==/UserScript==

setTimeout(function(){ console.log("Applying Track Link Remover"); var counter = 0; Array.from(document.getElementsByTagName("A")).forEach( function(elem, index, list) {
if (elem.getAttribute("data-arwt") != null){ var clone = elem.cloneNode(true); clone.onclick = null; clone.setAttribute("onclick", null); clone.onmousedown = null; clone.setAttribute("onmousedown", null); clone.ontouchstart = null; clone.setAttribute("ontouchstart", null); clone["data-arwt"] = null; clone["data-ved"] = null; elem.parentElement.replaceChild(clone, elem); counter++; } else if (elem.href != null && elem.onmousedown != null){ var clone = elem.cloneNode(true); clone.onmousedown = null; clone.setAttribute("onmousedown", null); clone.onclick = null; clone.setAttribute("onclick", null); elem.parentElement.replaceChild(clone, elem); counter++; } }); console.log("Patched " + counter + " links");

Array.from(document.getElementsByTagName("FORM")).forEach( function(elem, index, list) { var action = elem.getAttribute("action"); if(action != null && action.includes("search")){ console.log(list); Array.from(elem.getElementsByTagName("INPUT")).forEach( function(elemInner) { var innerRole = elemInner.getAttribute("role"); console.log(innerRole); if(innerRole != null && innerRole == "combobox" && elemInner.getAttribute("title") != null) { if(counter > 0){ elemInner.parentElement.parentElement.parentElement.style.backgroundColor = "#c9ffc9"; }else{ elemInner.parentElement.parentElement.parentElement.style.backgroundColor = "#ffc9c9"; } } }); } });

}, 1000);

*/