Direct links

Direct links out

目前为 2016-08-27 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Direct links
  3. // @name:ru Прямые ссылки
  4. // @namespace FIX
  5. // @version 0.0.1
  6. // @description Direct links out
  7. // @description:ru Замена ссылок на прямые
  8. // @author raletag
  9. // @match *://*/*
  10. // @grant unsafeWindow
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. console.time('Direct links load');
  16. var win = unsafeWindow || window;
  17.  
  18. function Handler (e) {
  19. console.time('HandlerTime');
  20. try {
  21. var link = e.target, url = link.href, tourl, base64;
  22. if (!url) {
  23. while (!url && link !== this) {
  24. link = link.parentNode;
  25. url = link.href;
  26. }
  27. }
  28. link.removeEventListener('mouseover', Handler, false);
  29. if (!url) {
  30. return true;
  31. }
  32. tourl = decodeURIComponent((url.match(/[?&](url|r|to|u|go)=([^&]*)(&|$)/i)||url.match(/(\/leech_out\.php\?.:|\/phpBB2\/goto\/|\/go\/\?)([^&]*)(&|$)/i)||[])[2]);
  33. if (!tourl) {
  34. return true;
  35. }
  36. try {
  37. base64 = win.atob(tourl);
  38. } catch (err) {
  39. }
  40.  
  41. if (base64) {
  42. tourl = base64;
  43. }
  44. if (tourl.match(/^http(|s):\/\/([^&]*)/i)) {
  45. tourl = decodeURIComponent(escape(tourl));
  46. console.group("Direct links");
  47. console.info(url);
  48. console.info(tourl);
  49. console.timeEnd('HandlerTime');
  50. console.groupEnd();
  51. link.href = tourl;
  52. }
  53. } catch (err) {
  54. console.error('Direct links error: ' + err);
  55. console.timeEnd('HandlerTime');
  56. alert('Direct links error: ' + err);
  57. return true;
  58. }
  59. return true;
  60. }
  61.  
  62. var links = document.getElementsByTagName('a');
  63. for (var i = links.length - 1; i >= 0; --i) {
  64. links[i].addEventListener('mouseover', Handler, false);
  65. }
  66.  
  67.  
  68. document.addEventListener('DOMNodeInserted',function(e){
  69. if (!e.currentTarget) return true;
  70. var links = e.currentTarget.getElementsByTagName('a');
  71. for (var i = links.length - 1; i >= 0; --i) {
  72. links[i].addEventListener('mouseover', Handler, false);
  73. }
  74. });
  75.  
  76. console.timeEnd('Direct links load');
  77. })();