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.

  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.9
  6. // @include *
  7. // @exclude *iqdb.org/*
  8. // @exclude *saucenao.com/*
  9. // @exclude *imgops.com/*
  10. // @exclude *.svg
  11.  
  12. // ==/UserScript==
  13.  
  14. var links = document.links;
  15.  
  16. var isInArchive = window.location.hostname == "web.archive.org" || window.location.hostname == "wayback.archive.org";
  17.  
  18. var specialCases = [];
  19. specialCases["https://www.youtube.com/redirect"] = "q";
  20. specialCases["http://www.amazon.com/exec/obidos"] = "path";
  21. specialCases["http://t.umblr.com/redirect"] = "z";
  22. specialCases["http://image.baidu.com/search/redirect"] = "objurl";
  23. specialCases["http://l.facebook.com/"] = "u";
  24.  
  25. 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","regex.info"];
  26.  
  27. var archivePrefix = isInArchive ? /\/web\/\d{1,14}\//.exec(window.location.href) : "";
  28.  
  29. var observer = new MutationObserver(function(mutations) {
  30. mutations.forEach(function(mutation) {
  31. if(mutation.target.nodeName == "A" && !blacklist.some(elem => mutation.target.href.includes(elem))) replaceURL(mutation.target);
  32. });
  33. });
  34.  
  35. var config = { attributes: true, childList: true, subtree: true };
  36. observer.observe(document.body, config);
  37.  
  38. for(var l = 0; l < links.length; l++)
  39. {
  40. if(blacklist.some(elem => links[l].href.includes(elem))) continue;
  41. replaceURL(links[l]);
  42. }
  43.  
  44. function replaceURL(link)
  45. {
  46. if(link.href.indexOf("r.search.yahoo.com") > -1 && link.href.split(";") != link.href)
  47. {
  48. var URLBits = {};
  49. var splitURL = link.href.split(";");
  50. var params;
  51. if(splitURL[0].indexOf("/RU=") > -1 ) params = splitURL[0].split("/");
  52. else params = splitURL[1].split("/");
  53.  
  54. for(var i = 0; i < params.length; i++)
  55. {
  56. var splitParameter = params[i].split("=");
  57. if(splitParameter[1] == undefined) continue;
  58. URLBits[splitParameter[0]] = decodeURIComponent(splitParameter[1]);
  59. }
  60. if(URLBits.hasOwnProperty("RU")) link.href = URLBits["RU"];
  61. }
  62. var testURL = URLToObject(link.href);
  63. if(testURL == null) return;
  64. if(link.href.substring(link.href.indexOf("?") + 1).indexOf("http") == 0)
  65. {
  66. var strippedURL = link.href.substring(link.href.indexOf("?") + 1);
  67. while(strippedURL.indexOf("%") > -1) strippedURL = decodeURIComponent(strippedURL);
  68. link.href = archivePrefix + strippedURL;
  69. return;
  70. }
  71. if(specialCases.hasOwnProperty(testURL.base))
  72. {
  73. link.href = archivePrefix + testURL[specialCases[testURL.base]];
  74. return;
  75. }
  76. if(link.href.indexOf("r.msn.com") > -1)
  77. {
  78. link.href = testURL.u;
  79. return;
  80. }
  81. if(testURL.hasOwnProperty("url")) link.href = archivePrefix + testURL.url;
  82. }
  83.  
  84. function URLToObject(url)
  85. {
  86. var URLBits = {};
  87.  
  88. var splitURL = [url.substring(0,url.indexOf("?")),url.substring(url.indexOf("?") + 1)];
  89.  
  90. if(splitURL[0] == "") return null;
  91. URLBits.base = splitURL[0];
  92. var params = splitURL[1].split("&");
  93.  
  94. for(var i = 0; i < params.length; i++)
  95. {
  96. var splitParameter = params[i].split("=");
  97. if(splitParameter[1] == undefined) continue;
  98. URLBits[splitParameter[0].toLowerCase()] = splitParameter[1];
  99. while(URLBits[splitParameter[0].toLowerCase()].toLowerCase().includes("%2f") || URLBits[splitParameter[0].toLowerCase()].toLowerCase().includes("%3f")) URLBits[splitParameter[0].toLowerCase()] = decodeURIComponent(URLBits[splitParameter[0].toLowerCase()]);
  100. }
  101.  
  102. return URLBits;
  103. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址