|
// ==UserScript== |
|
// @name Clean Reddit Share Link |
|
// @namespace http://rxliuli.com |
|
// @version 0.1.0 |
|
// @description Auto clean Reddit share link tracking parameters |
|
// @author rxliuli |
|
// @match https://www.reddit.com/* |
|
// @match https://old.reddit.com/* |
|
// @grant none |
|
// ==/UserScript== |
|
|
|
(function() { |
|
'use strict'; |
|
|
|
const trackingParams = [ |
|
'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', |
|
'fbclid', 'gclid', 'igshid', 'ref', 'ref_source', 'ref_url', |
|
'share', 'source', 'context', 'rdt', 'utm_name', |
|
'_branch_match_id', '_branch_referrer' |
|
]; |
|
|
|
function cleanURL(url) { |
|
try { |
|
const urlObj = new URL(url); |
|
trackingParams.forEach(param => { |
|
urlObj.searchParams.delete(param); |
|
}); |
|
return urlObj.toString(); |
|
} catch (e) { |
|
console.warn('Cannot parse URL:', url, e); |
|
return url; |
|
} |
|
} |
|
|
|
const originalWriteText = navigator.clipboard.writeText; |
|
navigator.clipboard.writeText = function(text) { |
|
if (text && (text.includes('reddit.com/') || text === window.location.href)) { |
|
const cleanedURL = cleanURL(text); |
|
if (cleanedURL !== text) { |
|
console.log('Intercepted and cleaned clipboard URL:', cleanedURL); |
|
return originalWriteText.call(this, cleanedURL); |
|
} |
|
} |
|
return originalWriteText.call(this, text); |
|
}; |
|
|
|
console.log('Reddit URL tracking parameter cleaner has been loaded'); |
|
})(); |