Saya tahu ini adalah kesepakatan yang dilakukan dan diselesaikan, tapi inilah yang saya gunakan untuk menyelesaikan masalah di aplikasi saya.
if (!e.target.hasAttribute("target")) {
e.preventDefault();
e.target.setAttribute("target", "_blank");
e.target.click();
return;
}
Pada dasarnya apa yang terjadi di sini adalah saya menjalankan pemeriksaan apakah tautan tersebut memiliki target=_blankatribut. Jika tidak, itu menghentikan tautan dari memicu, mengaturnya untuk membuka di jendela baru kemudian mengkliknya secara terprogram.
Anda dapat melangkah lebih jauh dan melewati penghentian klik asli (dan membuat kode Anda jauh lebih kompak) dengan mencoba ini:
if (!e.target.hasAttribute("target")) {
e.target.setAttribute("target", "_blank");
}
Jika Anda menggunakan jQuery untuk mengabstraksi implementasi menambahkan cross-browser atribut, Anda harus menggunakan ini alih-alih e.target.setAttribute("target", "_blank"):
jQuery(event.target).attr("target", "_blank")
Anda mungkin perlu mengolahnya agar sesuai dengan case-use yang tepat, tapi beginilah cara saya menggaruk gatal saya sendiri.
Berikut ini demo untuk Anda mainkan.
(Tautan di jsfiddle kembali ke diskusi ini .. tidak perlu tab baru :))
target="_top"tidak terbuka di jendela baru -target="_blank"tidak.