Strip URL tracking params before navigation
Assisted-by: Claude Opus 4.7 via Claude Code
change kouxvqzuzxoslowztnxsuorwkkpypymm
commit 5d6362c9d435519cf5c64c358d3c7707e350e40f
author Alpha Chen <alpha@kejadlen.dev>
date
parent yqwwuwqx
diff --git a/.config/glide/glide.ts b/.config/glide/glide.ts
index 11a0779e..cef4da4d 100644
--- a/.config/glide/glide.ts
+++ b/.config/glide/glide.ts
@@ -76,6 +76,28 @@ glide.autocmds.create("UrlEnter", { hostname: "x.com" }, async () => {
   await browser.tabs.update({ url: url.toString() });
 });
 
+// strip tracking params (rewrites the request before it fires, no reload)
+// forEach avoids Symbol.iterator, which Xray vision denies on cross-compartment values.
+const trackingParams = ["utm_*", "uta_*", "fbclid", "gclid"];
+browser.webRequest.onBeforeRequest.addListener(
+  (details) => {
+    const url = new URL(details.url);
+    const toDelete: string[] = [];
+    url.searchParams.forEach((_value, key) => {
+      if (trackingParams.some((pattern) =>
+        pattern.endsWith("*") ? key.startsWith(pattern.slice(0, -1)) : key === pattern
+      )) {
+        toDelete.push(key);
+      }
+    });
+    if (toDelete.length === 0) return;
+    for (const key of toDelete) url.searchParams.delete(key);
+    return { redirectUrl: url.toString() };
+  },
+  { urls: ["<all_urls>"], types: ["main_frame"] },
+  ["blocking"]
+);
+
 // doi -> sci-hub
 glide.autocmds.create("UrlEnter", { hostname: "doi.org" }, async () => {
   await browser.tabs.update({ url: `https://sci-hub.st/${glide.ctx.url}` });