Wiem, że to już załatwiona i rozwiązana umowa, ale oto, czego używam do rozwiązania problemu w mojej aplikacji.
if (!e.target.hasAttribute("target")) {
e.preventDefault();
e.target.setAttribute("target", "_blank");
e.target.click();
return;
}
Zasadniczo chodzi o to, że sprawdzam, czy link ma target=_blank atrybut. Jeśli tak się nie stanie, zatrzymuje wywołanie łącza, ustawia je tak, aby otwierało się w nowym oknie, a następnie programowo je klika.
Możesz pójść o krok dalej i pominąć zatrzymywanie oryginalnego kliknięcia (i sprawić, by kod był o wiele bardziej zwarty), próbując tego:
if (!e.target.hasAttribute("target")) {
e.target.setAttribute("target", "_blank");
}
Jeśli używasz jQuery do abstrahowania od implementacji dodawania atrybutu między przeglądarkami, powinieneś użyć tego zamiast e.target.setAttribute("target", "_blank"):
jQuery(event.target).attr("target", "_blank")
Być może będziesz musiał go przerobić, aby pasował do twojego konkretnego przypadku użycia, ale oto jak podrapałem swój własny swędzenie.
Oto demo tego w akcji, z którym możesz zadzierać.
(Odnośnik w jsfiddle powraca do tej dyskusji .. nie potrzeba nowej karty :))
target="_top"nie otwiera się w nowym oknie -target="_blank"nie.