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-08-08 提交的版本,查看 最新版本

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

QingJ © 2025

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