Greasy Fork is available in English.
Removes annoying url trackers parameters and copies the cleaned URL to the clipboard when using alt+c (or option+c on mac)
// ==UserScript==// @name Remove URL trackers and Copy// @namespace https://github.com/insign/easy-copy-url-without-trackers// @version 202409181420// @description Removes annoying url trackers parameters and copies the cleaned URL to the clipboard when using alt+c (or option+c on mac)// @match *://*/*// @author Hélio <[email protected]>// @license WTFPL// ==/UserScript==(function() {'use strict';const paramsToStrip = ['utm_', 'ref', 'gclid', 'gclsrc', 'gs_', 'ga_', '_ga', '_gaq', '__utm', 'fbclid', 'mc_', '_cid', 'epik', 'context'];function shouldPreserveParam(param) {return !paramsToStrip.some(prefix => param.startsWith(prefix));}function cleanUrl(url) {return url.replace(/\?([^#]*)/, (match, searchParams) => {const updatedParams = searchParams.split('&').filter(shouldPreserveParam).join('&');return updatedParams ? '?' + updatedParams : '';});}// Copy the cleaned URL to clipboardfunction copyToClipboard(url) {const tempInput = document.createElement('input');tempInput.value = url;document.body.appendChild(tempInput);tempInput.select();document.execCommand('copy');document.body.removeChild(tempInput);}// Display a sliding notification after copyingfunction showNotification(message) {const notification = document.createElement('div');notification.textContent = message;notification.style.position = 'fixed';notification.style.top = '0';notification.style.right = '10px';notification.style.backgroundColor = 'black';notification.style.color = 'white';notification.style.padding = '10px';notification.style.border = '3px solid white';notification.style.borderTopWidth = '0';notification.style.borderRadius = '0 0 5px 5px';notification.style.zIndex = '1000';notification.style.transform = 'translateY(-100%)'; // Start hidden above the viewportnotification.style.transition = 'transform 0.5s ease'; // Smooth sliding effectdocument.body.appendChild(notification);// Slide down into viewsetTimeout(() => {notification.style.transform = 'translateY(0)';}, 100); // Slight delay to allow CSS to apply// Slide up and remove after 1.5 secondssetTimeout(() => {notification.style.transform = 'translateY(-100%)'; // Slide back upsetTimeout(() => {document.body.removeChild(notification); // Remove after sliding up}, 500); // Time for the slide-up transition to finish}, 1500);}// Event listener for the shortcutwindow.addEventListener('keydown', function(event) {if (event.altKey && event.code === 'KeyC') {event.preventDefault();const currentUrl = location.href;const cleanedUrl = cleanUrl(currentUrl);copyToClipboard(cleanedUrl);// Check if the original URL and cleaned URL are differentif (currentUrl !== cleanedUrl) {showNotification('Copied without trackers');} else {showNotification('Copied!');}}});})();