Hide your IP Address on speedtest.net!
// ==UserScript== // @name Hide IP Address // @namespace https://greasyfork.org/users/831955 // @version 0.1 // @description Hide your IP Address on speedtest.net! // @author DanPlayz0 // @match https://www.speedtest.net/ // @icon https://www.google.com/s2/favicons?sz=64&domain=speedtest.net // @grant none // @license MIT // ==/UserScript== (async function () { 'use strict'; function waitForElm(selector) { return new Promise(resolve => { if (document.querySelector(selector)) { return resolve(document.querySelector(selector)); } const observer = new MutationObserver(mutations => { if (document.querySelector(selector)) { resolve(document.querySelector(selector)); observer.disconnect(); } }); observer.observe(document.body, { childList: true, subtree: true }); }); } await waitForElm(".ispComponent .r###lt-data"); let ipAddress = document.querySelector(".ispComponent .r###lt-data").innerText; document.addEventListener('click', (e) => { if (e.srcElement.id == "ip-reveal-btn") { e.srcElement.parentNode.className += " ip-revealed"; e.srcElement.parentNode.innerHTML = ipAddress; } }); setInterval(() => { const ispComponentIP = document.querySelector(".ispComponent .r###lt-data"); if (ispComponentIP && !ispComponentIP.className.includes("ip-revealed") && ispComponentIP.innerText.includes(ipAddress)) { ispComponentIP.innerHTML = '<a id="ip-reveal-btn">Click to reveal</a>'; } const r###ltDataIP = document.querySelector(".js-data-ip"); if (r###ltDataIP && !r###ltDataIP.className.includes("ip-revealed") && r###ltDataIP.innerText.includes(ipAddress)) { r###ltDataIP.innerHTML = '<a id="ip-reveal-btn">Click to reveal</a>'; } }, 10); })();