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 n'est pas un problème, mais je ne sais pas comment ouvrir une nouvelle fenêtre sans avoir à 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> 

 <script> window.open('http://www.example.com?ReportID=1', '_blank'); </script> 

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

Cela pourrait aider

 var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a"); link.href = 'http://www.google.com'; link.target = '_blank'; var event = new MouseEvent('click', { 'view': window, 'bubbles': false, 'cancelable': true }); link.dispatchEvent(event); 

Je sais que c'est une transaction faite et restreinte, 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 vérifie si le lien a un attribut target=_blank . Si ce n'est pas le cas, il arrête le déclenchement du lien, le configure pour ouvrir dans une nouvelle fenêtre, puis clique sur le programme.

Vous pouvez aller un peu plus loin et sauter l'arrêt du clic original (et rendre votre code beaucoup plus compact) en essayant ceci:

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

Si vous utilisez jQuery pour abstraire la mise en œuvre de l'ajout d'un attribut de navigateur croisé, vous devez l'utiliser au lieu de e.target.setAttribute("target", "_blank") :

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

Vous devrez peut-être l'adapter à nouveau pour s'adapter à votre cas d'utilisation exact, mais voici comment j'ai griffé ma propre démangeaison.

Voici une démonstration de l'action pour laquelle vous pouvez vous occuper.

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

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é à utiliser cela pour contourner le test strict du XHTML du W3C.

C'est ainsi que je le fais avec jQuery. J'ai une classe pour chaque lien que je souhaite ouvrir dans une nouvelle fenêtre.

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

Vous pouvez extraire le href de la balise a:

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

Cela pourrait vous aider à ouvrir tous les liens de la page :

 $(".myClass").each( function(i,e){ window.open(e, '_blank'); } ); 

Il ouvrira tous les <a href="" class="myClass"></a> éléments de lien à un autre onglet comme vous auriez cliqué sur chacun d'eux.

Il suffit de coller dans la console du navigateur. JQuery cadre requis