Je sais que c'est un accord fait et réglé, 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;
}
En gros, ce qui se passe ici, c'est que je vérifie si le lien a target=_blank attribut. Si ce n'est pas le cas, il arrête le lien de se déclencher, le configure pour s'ouvrir dans une nouvelle fenêtre, puis clique dessus par programme.
Vous pouvez aller plus loin et ignorer 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 utilisiez jQuery pour résumer l'implémentation de l'ajout d'un attribut cross-browser, vous devriez utiliser ceci au lieu de e.target.setAttribute("target", "_blank"):
jQuery(event.target).attr("target", "_blank")
Vous devrez peut-être le retravailler pour l'adapter à votre cas d'utilisation exact, mais voici comment j'ai gratté ma propre démangeaison.
Voici une démo en action pour que vous puissiez jouer avec.
(Le lien dans jsfiddle revient à cette discussion .. pas besoin d'un nouvel onglet :))
target="_top"ne s'ouvre pas dans une nouvelle fenêtre -target="_blank"fait.