Je sais que cela est fait et réglait beaucoup, 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 est que je lance un chèque si le lien a target=_blank
attribut. Si ce n'est pas le cas, il arrête le déclenchement du lien, le configure pour s'ouvrir dans une nouvelle fenêtre puis clique dessus par programmation.
Vous pouvez aller plus loin et sauter l'arrêt du clic d'origine (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 d'ajouter un attribut cross-browser, vous devez utiliser au lieu de e.target.setAttribute("target", "_blank")
:
jQuery(event.target).attr("target", "_blank")
vous devrez peut-être retravailler pour l'adapter à votre cas d'utilisation exacte, mais voici comment je grattais démange.
Voici un demo en action pour vous de jouer avec.
(Le lien jsFiddle revient à cette discussion .. pas besoin d'un nouvel onglet :))
Hm? 'target =" _ top "' ne s'ouvre pas dans une nouvelle fenêtre - 'target =" _ blank "' does. – Tomalak
Si le lien est déjà ouvert dans une nouvelle fenêtre (en raison de target = "_ blank") et que le gestionnaire de clic javascript met déjà à jour votre base de données, pourquoi devriez-vous ouvrir la nouvelle fenêtre avec Javascript? –