this repo has no description
at v1.2.1 3.2 kB view raw
1/* eslint-disable no-console */ 2/* eslint-disable no-undef */ 3 4const starterUrls = ["web.", "sentry."]; 5let blockLoading = true; 6let doing = false; 7let collectedUrls = new Set(); 8 9chrome.webNavigation.onBeforeNavigate.addListener(async (details) => { 10 const url = new URL(details.url); 11 if (!blockLoading && url.hostname.endsWith("discord.com")) { 12 await chrome.declarativeNetRequest.updateEnabledRulesets({ 13 enableRulesetIds: ["modifyResponseHeaders", "blockLoading"] 14 }); 15 blockLoading = true; 16 collectedUrls.clear(); 17 } 18}); 19 20chrome.webRequest.onBeforeRequest.addListener( 21 async (details) => { 22 if (details.tabId === -1) return; 23 if (starterUrls.some((url) => details.url.includes(url))) { 24 console.log("Adding", details.url); 25 collectedUrls.add(details.url); 26 } 27 28 if (collectedUrls.size === starterUrls.length) { 29 if (doing) return; 30 if (!blockLoading) return; 31 doing = true; 32 const urls = [...collectedUrls]; 33 console.log("Doing", urls); 34 35 console.log("Running moonlight script"); 36 try { 37 await chrome.scripting.executeScript({ 38 target: { tabId: details.tabId }, 39 world: "MAIN", 40 files: ["index.js"] 41 }); 42 } catch (e) { 43 console.log(e); 44 } 45 46 console.log("Initializing moonlight"); 47 try { 48 await chrome.scripting.executeScript({ 49 target: { tabId: details.tabId }, 50 world: "MAIN", 51 func: async () => { 52 try { 53 await window._moonlightBrowserInit(); 54 } catch (e) { 55 console.log(e); 56 } 57 } 58 }); 59 } catch (e) { 60 console.log(e); 61 } 62 63 console.log("Updating rulesets"); 64 try { 65 blockLoading = false; 66 await chrome.declarativeNetRequest.updateEnabledRulesets({ 67 disableRulesetIds: ["blockLoading"], 68 enableRulesetIds: ["modifyResponseHeaders"] 69 }); 70 } catch (e) { 71 console.log(e); 72 } 73 74 console.log("Readding scripts"); 75 try { 76 await chrome.scripting.executeScript({ 77 target: { tabId: details.tabId }, 78 world: "MAIN", 79 args: [urls], 80 func: async (urls) => { 81 const scripts = [...document.querySelectorAll("script")].filter( 82 (script) => 83 script.src && urls.some((url) => url.includes(script.src)) 84 ); 85 86 // backwards 87 urls.reverse(); 88 for (const url of urls) { 89 const script = scripts.find((script) => url.includes(script.src)); 90 console.log("adding new script", script); 91 92 const newScript = document.createElement("script"); 93 for (const { name, value } of script.attributes) { 94 newScript.setAttribute(name, value); 95 } 96 97 script.remove(); 98 document.documentElement.appendChild(newScript); 99 } 100 } 101 }); 102 } catch (e) { 103 console.log(e); 104 } 105 106 console.log("Done"); 107 doing = false; 108 collectedUrls.clear(); 109 } 110 }, 111 { 112 urls: ["*://*.discord.com/assets/*.js"] 113 } 114);