NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name TrackingTokenStripper // @version 1.0 // @description Remove most of the annoying tracking token from URL parameters // @license MIT // @homepage https://blog.miniasp.com/ // @homepageURL https://blog.miniasp.com/ // @website https://www.facebook.com/will.fans // @source https://github.com/doggy8088/TrackingTokenStripper // @namespace https://github.com/doggy8088/TrackingTokenStripper // @author Will Huang // @match *://*/* // @run-at document-start // ==/UserScript== (function() { var s = TrackingTokenStripper(location.href) .remove('fbclid') .remove('utm_source') .remove('utm_medium') .remove('utm_term') .remove('utm_campaign') .remove('utm_content') .remove('utm_cid') .remove('utm_reader') .remove('utm_referrer') .remove('utm_name') .remove('utm_social') .remove('utm_social-type') .remove('gclid') .remove('igshid') .remove('_hsenc') .remove('_hsmi') .remove('mc_cid') .remove('mc_eid') .remove('mkt_tok') .remove('yclid') .remove('_openstat') .toString(); if (s && location.href !== s) { location.href = s; } function TrackingTokenStripper(url) { return { remove(name) { var [path, other] = url.split('?', 2); var [query, hash] = other ? other.split('#', 2) : [query, '']; if (query) { let new_query = []; for (let param of query.split('&')) { let [key, val] = param.split('=', 2); if (key !== name) { new_query.push(param); } } query = new_query.join('&'); } query = query ? query = '?' + query : ''; hash = hash ? hash = '#' + hash : ''; return TrackingTokenStripper(path + query + hash); }, toString() { return url; } } } })();