Ich weiß, dass dies ein abgeschlossenes Geschäft ist, aber hier ist, was ich verwende, um das Problem in meiner App zu lösen.
if (!e.target.hasAttribute("target")) {
e.preventDefault();
e.target.setAttribute("target", "_blank");
e.target.click();
return;
}
Grundsätzlich wird hier geprüft, ob der Link ein target=_blankAttribut hat. Wenn dies nicht der Fall ist, wird der Link nicht ausgelöst, so eingerichtet, dass er in einem neuen Fenster geöffnet wird, und dann programmgesteuert darauf geklickt.
Sie können noch einen Schritt weiter gehen und das Stoppen des ursprünglichen Klicks überspringen (und Ihren Code wesentlich kompakter gestalten), indem Sie Folgendes versuchen:
if (!e.target.hasAttribute("target")) {
e.target.setAttribute("target", "_blank");
}
Wenn Sie jQuery verwendet haben, um die Implementierung des Hinzufügens eines Attribut-Cross-Browsers zu abstrahieren, sollten Sie dies anstelle von e.target.setAttribute("target", "_blank"):
jQuery(event.target).attr("target", "_blank")
Möglicherweise müssen Sie es überarbeiten, um es genau an Ihren Anwendungsfall anzupassen, aber so kratzte ich meinen eigenen Juckreiz.
Hier ist eine Demo in Aktion, mit der Sie sich anlegen können.
(Der Link in jsfiddle kehrt zu dieser Diskussion zurück. Es wird kein neuer Tab benötigt :))
target="_top"öffnet nicht in einem neuen Fenster -target="_blank"tut.