Link Untracker

Remove tracking elements from links

当前为 2018-01-31 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Link Untracker
  3. // @namespace IzzySoft
  4. // @description Remove tracking elements from links
  5. // @license CC BY-NC-SA
  6. // @include *
  7. // @exclude *phpmyadmin*
  8. // @version 7
  9. // @grant unsafeWindow
  10. // ==/UserScript==
  11.  
  12. /* badp: we strip parameters starting with that. Some are taken from NetURL, see
  13. https://github.com/Smile4ever/firefoxaddons/tree/master/Neat%20URL-webext
  14. fb_: Facebook; ga_: Google; hmb_: HumbleBundle(?); utm_: Urchin Tracker; wt_: Webtrekk; WT.: Webtrends
  15. */
  16. var badp = ['fb_','ga_','hmb_','utm_',
  17. 'ei@google.','gws_rd@google.','sei@google.','ved@google.',
  18. 'pd_rd_r@amazon.','pd_rd_w@amazon.','pd_rd_wg@amazon.','psc@amazon.',' _encoding@amazon.',
  19. 'wt_','WT.','yclid','referrer'
  20. ];
  21. var anch = '';
  22. var replace_semicolon = true; /* some sites use ";" to separate URL params;
  23. URLSearchParams can't deal with that and messes up.
  24. If those sites don't work with "&", either set this
  25. to "false" or add that site on the exclude list
  26. */
  27.  
  28. function getRealLinkFromGoogleUrl(a) { /* adapted from https://github.com/Rob--W/dont-track-me-google at 2018-01-03 */
  29. if ((a.hostname === location.hostname || a.hostname === 'www.google.com') &&
  30. /^\/(local_)?url$/.test(a.pathname)) {
  31. // Google Maps / Dito (/local_url?q=<url>)
  32. // Mobile (/url?q=<url>)
  33. var url = /[?&](?:q|url)=((?:https?|ftp)[%:][^&]+)/.exec(a.search);
  34. if (url) {
  35. return decodeURIComponent(url[1]);
  36. }
  37. // Help pages, e.g. safe browsing (/url?...&q=%2Fsupport%2Fanswer...)
  38. url = /[?&](?:q|url)=((?:%2[Ff]|\/)[^&]+)/.exec(a.search);
  39. if (url) {
  40. return a.origin + decodeURIComponent(url[1]);
  41. }
  42. }
  43. return a.href;
  44. }
  45.  
  46. for(var i = 0; i < document.links.length; i++) {
  47. var elem = document.links[i];
  48. if (elem.search == '') continue;
  49. if (replace_semicolon) var purl = new URLSearchParams(elem.search.replace(new RegExp(';','g'),'&'));
  50. else var purl = new URLSearchParams(elem.search);
  51. var keysToDelete = [];
  52. for(var pair of purl) {
  53. for(let b of badp) {
  54. if (pair[0].startsWith(b)) { keysToDelete.push(pair[0]); break; }
  55. }
  56. }
  57. for(var key of keysToDelete) {
  58. purl.delete(key);
  59. }
  60. /* for (let b of badp) { purl.delete(b); }*/
  61. if (elem.href.indexOf('#') > 0) anch = '#' + elem.href.split('#')[1];
  62. else anch = '';
  63. elem.href = elem.href.split('?')[0] + '?' + purl.toString() + anch;
  64. elem.href = getRealLinkFromGoogleUrl(elem);
  65. }