So che è un affare fatto e risolto, ma ecco cosa sto usando per risolvere il problema nella mia app.
if (!e.target.hasAttribute("target")) {
e.preventDefault();
e.target.setAttribute("target", "_blank");
e.target.click();
return;
}
Fondamentalmente quello che sta succedendo qui è che eseguo un controllo per verificare se il collegamento ha un target=_blankattributo. In caso contrario, interrompe l'attivazione del collegamento, lo imposta per aprirsi in una nuova finestra, quindi fa clic programmaticamente su di esso.
Puoi fare un ulteriore passo avanti e saltare l'arresto del clic originale (e rendere il tuo codice molto più compatto) provando questo:
if (!e.target.hasAttribute("target")) {
e.target.setAttribute("target", "_blank");
}
Se si utilizza jQuery per sottrarre l'implementazione dell'aggiunta di un attributo a più browser, è necessario utilizzare questo invece di e.target.setAttribute("target", "_blank"):
jQuery(event.target).attr("target", "_blank")
Potrebbe essere necessario rielaborarlo per adattarlo esattamente al tuo caso d'uso, ma ecco come ho graffiato il mio prurito.
Ecco una demo in azione per farti confondere.
(Il link in jsfiddle torna a questa discussione .. non c'è bisogno di una nuova scheda :))
target="_top"non si apre in una nuova finestra - lotarget="_blank"fa.