URL Stripper

Takes offsite links that stick the original URL into an onsite link with extra parameters and changes the href to that original URL.

目前为 2016-02-21 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name URL Stripper
  3. // @namespace DoomTay
  4. // @description Takes offsite links that stick the original URL into an onsite link with extra parameters and changes the href to that original URL.
  5. // @version 1.1.7
  6. // @exclude *iqdb.org/*
  7. // @exclude *saucenao.com/*
  8.  
  9. // ==/UserScript==
  10.  
  11. var links = document.links;
  12.  
  13. var isInArchive = window.location.hostname == "web.archive.org";
  14.  
  15. var specialCases = [];
  16. specialCases["https://www.youtube.com/redirect"] = "q";
  17. specialCases["http://www.amazon.com/exec/obidos"] = "path";
  18. specialCases["http://t.umblr.com/redirect"] = "z";
  19. var blacklist = ["tineye.com/search","saucenao.com/search.php","web.archive.org/web/form-submit.jsp","wayback/available","iqdb.org","amazon.com","smashbros.com/wii/en_us/notify.html","multiez.com"];
  20.  
  21. var archivePrefix = isInArchive ? /http:\/\/web\.archive\.org\/web\/\d{1,14}\//.exec(window.location.href) : "";
  22.  
  23. var observer = new MutationObserver(function(mutations) {
  24. mutations.forEach(function(mutation) {
  25. if(mutation.target.nodeName == "A") replaceURL(mutation.target);
  26. });
  27. });
  28.  
  29. var config = { attributes: true, childList: true, characterData: true, subtree: true };
  30. observer.observe(document.body, config);
  31.  
  32. for(var l = 0; l < links.length; l++)
  33. {
  34. if(blacklist.some(elem => links[l].href.indexOf(elem) > -1)) continue;
  35. replaceURL(links[l]);
  36. }
  37.  
  38. function replaceURL(link)
  39. {
  40. if(link.href.indexOf("r.search.yahoo.com") > -1 && link.href.split(";") != link.href)
  41. {
  42. var URLBits = {};
  43. var splitURL = link.href.split(";");
  44. var params;
  45. if(splitURL[0].indexOf("/RU=") > -1 ) params = splitURL[0].split("/");
  46. else params = splitURL[1].split("/");
  47. for(var i = 0; i < params.length; i++)
  48. {
  49. var splitParameter = params[i].split("=");
  50. if(splitParameter[1] == undefined) continue;
  51. URLBits[splitParameter[0]] = decodeURIComponent(splitParameter[1]);
  52. }
  53. if(URLBits.hasOwnProperty("RU")) link.href = URLBits["RU"];
  54. }
  55. var testURL = URLToObject(link.href);
  56. if(testURL == null) return;
  57. if(link.href.substring(link.href.indexOf("?") + 1).indexOf("http") == 0)
  58. {
  59. var strippedURL = link.href.substring(link.href.indexOf("?") + 1);
  60. while(strippedURL.indexOf("%") > -1) strippedURL = decodeURIComponent(strippedURL);
  61. link.href = archivePrefix + strippedURL;
  62. return;
  63. }
  64. if(specialCases.hasOwnProperty(testURL.base))
  65. {
  66. link.href = archivePrefix + testURL[specialCases[testURL.base]];
  67. return;
  68. }
  69. if(link.href.indexOf("r.msn.com") > -1)
  70. {
  71. link.href = testURL.u;
  72. return;
  73. }
  74. if(testURL.hasOwnProperty("url")) link.href = archivePrefix + testURL.url;
  75. else if(testURL.hasOwnProperty("URL")) link.href = archivePrefix + testURL.URL;
  76. }
  77.  
  78. function URLToObject(url)
  79. {
  80. var URLBits = {};
  81.  
  82. var splitURL = [url.substring(0,url.indexOf("?")),url.substring(url.indexOf("?") + 1)];
  83.  
  84. if(splitURL[0] == "") return null;
  85. URLBits.base = splitURL[0];
  86. var params = splitURL[1].split("&");
  87.  
  88. for(var i = 0; i < params.length; i++)
  89. {
  90. var splitParameter = params[i].split("=");
  91. if(splitParameter[1] == undefined) continue;
  92. URLBits[splitParameter[0]] = splitParameter[1];
  93. while(URLBits[splitParameter[0]].indexOf("%") > -1) URLBits[splitParameter[0]] = decodeURIComponent(URLBits[splitParameter[0]]);
  94. }
  95.  
  96. return URLBits;
  97. }