148 votes

Comment simuler target = "_ blank" en JavaScript

Lorsqu'un utilisateur clique sur un lien, je dois mettre à jour un champ dans une base de données, puis ouvrir le lien demandé dans une nouvelle fenêtre. La mise à jour ne pose aucun problème, mais je ne sais pas comment ouvrir une nouvelle fenêtre sans leur demander de cliquer sur un autre lien hypertexte.

 <body onLoad="document.getElementById('redirect').click">
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a>
</body>
 

282voto

ChristopheD Points 38217
 <script type='text/javascript'>
window.open('http://www.mydomain.com?ReportID=1', '_blank');
</script>
 

Le deuxième paramètre est facultatif et correspond au nom de la fenêtre cible.

12voto

Akamaozu Points 420

Je sais que c'est un fait et tri, mais voici ce que j'utilise pour résoudre le problème dans mon application.

if (!e.target.hasAttribute("target")) {
    e.preventDefault();     
    e.target.setAttribute("target", "_blank");
    e.target.click();
    return;
}

Fondamentalement ce qui se passe ici c'est que je exécuter une vérification si le lien a target=_blank d'attribut. Si ça ne marche pas, il arrête le lien de déclenchement, il établit pour ouvrir dans une nouvelle fenêtre, puis par programmation clique sur elle.

Vous pouvez aller plus loin et de passer l'arrêt de l'original de la souris (et de rendre votre code d'un ensemble beaucoup plus compact) en essayant ce:

if (!e.target.hasAttribute("target")) {
    e.target.setAttribute("target", "_blank");
}

Si vous utilisez jQuery de faire abstraction de la mise en œuvre de l'ajout d'un attribut de la croix-navigateur, vous devez utiliser ce lieu de e.target.setAttribute("target", "_blank"):

    jQuery(event.target).attr("target", "_blank")

Vous pouvez avoir besoin de retravailler pour l'adapter à votre cas d'utilisation, mais voici comment je l'ai rayé de ma propre démangeaisons.

Voici une démo de en action pour vous de jouer avec.

(Le lien dans jsfiddle revient à cette discussion .. pas besoin d'un nouvel onglet :))

7voto

Zennethe Fuchs Points 21

Personnellement, je préfère utiliser le code suivant s'il s'agit d'un seul lien. Sinon, il est probablement préférable de créer une fonction avec un code similaire.

 onclick="this.target='_blank';"
 

J'ai commencé à l'utiliser pour contourner le test strict XHTML du W3C.

5voto

Jindra Helcl Points 410

Voici comment je le fais avec jQuery. J'ai une classe pour chaque lien que je veux ouvrir dans une nouvelle fenêtre.

 $(function(){

    $(".external").click(function(e) {
        e.preventDefault();
        window.open(this.href);
    });
});
 

2voto

treznik Points 2514

Vous pouvez extraire le href de la balise a:

 window.open(document.getElementById('redirect').href);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X