2010-08-28 79 views
2

在我的网站上,我有许多外部链接以及内部链接。 我想用javascript或w/e中的某种解决方案检测外部链接并在新选项卡中打开它们,但会在同一选项卡中打开内部链接。 谢谢! =)如何在新标签中打开外部链接

+0

您的网站链接是否有一些常见模式 – Hulk 2010-08-28 21:19:21

+0

是的,如果它们都包含“blogspot.com”,则其他所有内容都是外部的。 – MKv4 2010-08-28 21:30:07

回答

3
function getXterlinks() 
{ 
    var Xterlinks = document.getElementsByTagName('A'); 
    for (var i=0;i<Xterlinks.length;i++) 
    { 
     var eachLink = Xterlinks[i]; 
     var regexp_isYourdomain="your-domain.com"; 
     var regexp_ishttp=/(http(.)*:\/\/)/; 
     if((eachLink.href != null) && (eachLink.href.match(regexp_isYourdomain) == null) && eachLink.href.match(regexp_ishttp)!=null) 
     { 
      eachLink.target ="_blank"; 
     } 
    } 
} 

来源:http://www.mediawiki.org/wiki/Manual:Opening_external_links_in_a_new_window#How_to_make_external_links_open_in_a_new_window

+0

请注意,由浏览器决定是否应在新窗口或新选项卡中打开链接。你不能强制一个行为或其他使用html或JavaScript的行为。 – 2010-08-28 21:23:57

+0

@Jan - true,但使用'target =“_ blank”'是做这件事的标准方法。尽管如此,你的评论仍然存在。 – 2010-08-28 21:25:16

+0

工作!谢谢! :D – MKv4 2010-08-28 21:44:28

0

是啊,jQuery的仍然JavaScript的。如何:

$('a[href^="http://your-domain.com"]').attr("target", "_self"); 

$('a').not('a[href^="http://your-domain.com"]').attr("target", "_blank"); 

不知道第二,但你明白了。

0

我为我的个人网站写了这个解决方案。只要你喜欢jQuery(你应该,imho),你可以将它包含在一个普通的js文件中,然后忘掉它。它将与动态内容一起工作,并且如果您设置target =“_ blank”,则不会强制在当前选项卡中打开内部链接。

$(function() { 
    $('body').on('click', 'a', function() { 
     var currentHost = document.location.protocol+'//'+document.location.hostname; 
     if (this.href.indexOf(currentHost) != 0 && (this.href.indexOf('http') == 0 || this.href.indexOf('ftp') == 0)) { 
      window.open(this.href, '_blank'); 
      return false; 
     } 
    }); 
}); 

注:如果您使用jQuery < 7,使用.bind()来代替。对()

看到它在行动上http://www.seanknutson.com

相关问题