Remove URL trackers

removes annoying url trackers parameters like utm_*, ref, etc

Pada tanggal 17 September 2024. Lihat %(latest_version_link).

// ==UserScript==
// @name Remove URL trackers
// @namespace https://github.com/insign
// @version 202409170842
// @description removes annoying url trackers parameters like utm_*, ref, etc
// @match http*://*
// @author Hélio <[email protected]>
// @license WTFPL
// ==/UserScript==

(function() {
  // Parameters to remove from the URL (we can extend this list if needed).
  const paramsToStrip = ['utm_', 'ref']

  /**
   * Checks if a parameter should be removed from the URL.
   * @param {string} param - The parameter name (key=value format).
   * @returns {boolean} - True if the parameter should be preserved, false otherwise.
   */
  function shouldPreserveParam(param) {
    return !paramsToStrip.some(prefix => param.startsWith(prefix))
  }

  /**
   * Cleans the URL by removing the specified parameters.
   * @param {string} url - The original URL.
   * @returns {string} - The cleaned-up URL with unwanted parameters removed.
   */
  function cleanUrl(url) {
    return url.replace(/\?([^#]*)/, (match, searchParams) => {
      const updatedParams = searchParams
        .split('&')
        .filter(shouldPreserveParam) // Retain only non-matching params.
        .join('&')

      return updatedParams ? '?' + updatedParams : ''
    })
  }

  /**
   * Updates the browser's URL by replacing history state if needed.
   */
  function updateUrl() {
    const currentUrl = location.href
    const cleanedUrl = cleanUrl(currentUrl)

    if (currentUrl !== cleanedUrl && window.history.replaceState) {
      window.history.replaceState({}, '', cleanedUrl)
    }
  }

  // Only run if the URL contains parameters.
  if (/[\?&]/.test(location.search)) {
    updateUrl()
  }
})()