[ALL] Links Open EXTERNAL in NEW BACKGROUND Tab

Open EXTERNAL links in NEW BACKGROUND tab.

  1. // ==UserScript==
  2. // @name [ALL] Links Open EXTERNAL in NEW BACKGROUND Tab
  3. // @author
  4. // @description Open EXTERNAL links in NEW BACKGROUND tab.
  5. // @downloadURL
  6. // @grant GM_openInTab
  7. // @homepageURL https://bitbucket.org/INSMODSCUM/userscripts-scripts/src
  8. // @icon
  9. // @include http*://*
  10. // @namespace insmodscum
  11. // @require
  12. // @run-at document-start
  13. // @updateURL
  14. // @version 1.0
  15. // ==/UserScript==
  16.  
  17. // source: http://userscripts-mirror.org/scripts/review/42130
  18.  
  19. function getDomain(url) {
  20. var parts = url.split('//');
  21. var domain = parts[1];
  22. if(domain.indexOf('/')) {
  23. var p = domain.split('/');
  24. domain = p[0];
  25. }
  26. if(domain.indexOf(':')) {
  27. var d = domain.split(':');
  28. domain = d[0];
  29. }
  30. return domain;
  31. }
  32.  
  33. function TabOpener(a) {
  34. var clickHandler = function(e) {
  35. GM_openInTab(a.href, true);
  36. e.preventDefault();
  37. };
  38. a.addEventListener('click', clickHandler, false);
  39. }
  40.  
  41. var as = document.getElementsByTagName('a');
  42. for (var i = 0, a; a = as[i]; i++) {
  43. if (a.hasAttribute('href') && !a.href.match(/^javascript:/i) && (a.href.indexOf(getDomain(document.URL)) < 0) ) {
  44. new TabOpener(a);
  45. }
  46. }
  47.  
  48. // // code below does not work. treats subdomains as "external" (e.g. stuff.slashdot.org is external)
  49.  
  50. // // ==UserScript==
  51. // // @name Open external link in new tab
  52. // // @version 0.1.3
  53. // // @namespace eight04.blogspot.com
  54. // // @description This script will open any external link in new tab. Support dynamic content
  55. // // @include http*
  56. // // @grant none
  57. // // ==/UserScript==
  58.  
  59. // "use strict";
  60.  
  61. // function getAnchor(element) {
  62. // while (element && element.nodeName != "A") {
  63. // element = element.parentNode;
  64. // }
  65. // return element;
  66. // }
  67.  
  68. // document.addEventListener("click", function(e){
  69. // var anchor = getAnchor(e.target);
  70. // if (!anchor || anchor.target || anchor.protocol == "javascript:" || e.isTrusted === false || !anchor.offsetParent || (e.isTrusted == null && !e.detail)) {
  71. // return;
  72. // }
  73. // if (anchor.hostname != location.hostname) {
  74. // anchor.target = "_blank";
  75. // }
  76. // });