this repo has no description
at v1.3.0 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) => script.src && urls.some((url) => url.includes(script.src)) 83 ); 84 85 // backwards 86 urls.reverse(); 87 for (const url of urls) { 88 const script = scripts.find((script) => url.includes(script.src)); 89 console.log("adding new script", script); 90 91 const newScript = document.createElement("script"); 92 for (const { name, value } of script.attributes) { 93 newScript.setAttribute(name, value); 94 } 95 96 script.remove(); 97 document.documentElement.appendChild(newScript); 98 } 99 } 100 }); 101 } catch (e) { 102 console.log(e); 103 } 104 105 console.log("Done"); 106 doing = false; 107 collectedUrls.clear(); 108 } 109 }, 110 { 111 urls: ["*://*.discord.com/assets/*.js"] 112 } 113);