Remove URL Tracking Parameters

移除網址中的跟踪參數

  1. // ==UserScript==
  2. // @name Remove URL Tracking Parameters
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.4.1
  5. // @description 移除網址中的跟踪參數
  6. // @author abc0922001
  7. // @match *://*/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. "use strict";
  14.  
  15. // 此函式內所使用的追蹤參數集合,包含各大行銷工具常見的參數,設計考量在於方便統一移除 URL 中所有可能的追蹤參數。
  16. const trackingParams = new Set([
  17. "utm_source",
  18. "utm_medium",
  19. "utm_campaign",
  20. "utm_term",
  21. "utm_content",
  22. "fbclid",
  23. "gclid",
  24. "yclid",
  25. "mc_cid",
  26. "mc_eid",
  27. "dclid",
  28. "from",
  29. "utm_channel",
  30. "utm_id",
  31. "msclkid",
  32. "mkt_tok",
  33. "pk_campaign",
  34. "pk_kwd",
  35. "affid",
  36. ]);
  37.  
  38. /*
  39. * 此函式 removeTrackingParams 用來移除傳入 URL 中之跟踪參數,
  40. * 並回傳處理後之 URL 字串,
  41. * 設計考量在於提升空間與時間 複 雜 度 效能。
  42. */
  43. function removeTrackingParams(url) {
  44. const urlObj = new URL(url);
  45. let removed = false;
  46. for (const key of Array.from(urlObj.searchParams.keys())) {
  47. if (trackingParams.has(key)) {
  48. urlObj.searchParams.delete(key);
  49. removed = true;
  50. }
  51. }
  52. return removed ? urlObj.toString() : url;
  53. }
  54.  
  55. /*
  56. * 此函式 cleanURL 用來更新當前瀏覽器 URL,
  57. * 移除其中之跟踪參數並同步更新歷史記錄,
  58. * 旨在優化使用者隱私與瀏覽體驗。
  59. */
  60. function cleanURL() {
  61. try {
  62. const currentUrl = window.location.href;
  63. const cleanedUrl = removeTrackingParams(currentUrl);
  64. if (cleanedUrl !== currentUrl) {
  65. window.history.replaceState({}, document.title, cleanedUrl);
  66. }
  67. } catch (error) {
  68. console.error("Error processing URL:", error);
  69. }
  70. }
  71.  
  72. // 初始 URL 清理
  73. cleanURL();
  74.  
  75. // 監聽瀏覽器歷史狀態變更
  76. window.addEventListener("popstate", cleanURL);
  77.  
  78. // 若需支援單頁應用程式,可額外監聽自訂路由事件
  79. // window.addEventListener('routechange', cleanURL);
  80. })();