2010-08-28 4 views
2

Sur mon site Web j'ai beaucoup de liens externes, aussi bien que des liens internes. je voudrais une sorte de solution en javascript ou w/e qui détecte les liens externes et les ouvre dans un nouvel onglet, mais laisse les liens internes à ouvrir dans le même onglet. merci! =)comment ouvrir les liens externes dans un nouvel onglet

+0

Y at-il quelque chose de modèle commun dans votre site liens – Hulk

+0

ouais ils contiennent tous "blogspot.com" si interne, tout le reste est externe. – MKv4

Répondre

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"; 
     } 
    } 
} 

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

+0

Notez qu'il appartient au navigateur de choisir si le lien doit être ouvert dans une nouvelle fenêtre ou dans un nouvel onglet. Vous ne pouvez pas forcer un comportement ou l'autre en utilisant html ou JavaScript. –

+0

@Jan - true, mais l'utilisation de 'target =" _ blank "' est la méthode standard pour cela. Votre commentaire est en place, néanmoins. –

+0

qui a fonctionné! Je vous remercie! : D – MKv4

0

Ouais, eh bien, JavaScript encore jQuery. Que diriez-vous:

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

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

Pas sûr de la seconde, cependant, mais vous avez l'idée.

0

J'ai écrit cette solution pour mon site Web personnel. Tant que vous aimez jQuery (que vous devriez, imho), vous pouvez l'inclure dans un fichier js commun et l'oublier. Il fonctionnera avec du contenu dynamique et ne forcera pas les liens internes à s'ouvrir dans l'onglet en cours si vous définissez 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; 
     } 
    }); 
}); 

Note: Si vous utilisez jQuery < 7, utilisez .bind() au lieu de .on()

Voir en action sur http://www.seanknutson.com.

Questions connexes