JavaScript'te target = “_ blank” simülasyonu nasıl yapılır


156

Bir kullanıcı bir bağlantıyı tıklattığında, veritabanındaki bir alanı güncellemem ve sonra istenen bağlantıyı yeni bir pencerede açmam gerekir. Güncelleme sorun değil, ancak yeni bir pencereyi başka bir köprüye tıklatmalarını gerektirmeden nasıl açacağımı bilmiyorum.

<body onLoad="document.getElementById('redirect').click">
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a>
</body>

1
Hımm? target="_top"yeni bir pencerede target="_blank"açılmaz -.
Tomalak

Bağlantı zaten yeni bir pencerede açılıyorsa (target = "_ blank" nedeniyle) ve javascript tıklama işleyicisi zaten veritabanınızı güncelliyorsa, neden yeni pencereyi Javascript ile açmanız gerekiyor?
Joel Mueller

Yanıtlar:


298
<script>
    window.open('http://www.example.com?ReportID=1', '_blank');
</script>

İkinci parametre isteğe bağlıdır ve hedef pencerenin adıdır.


2
window.openne target="_blank"yapar - URL'yi yeni bir pencerede açar.
ceejayoz

3
Evet. window.open () işlevinin ikinci argümanı, bir bağlantıda bir hedef belirlemeye benzer şekilde pencereye vermek istediğiniz "ad" dır. developer.mozilla.org/En/DOM:window.open
Omer Bokhari

2
Ah anlıyorum. window.open, Firefox açılır pencere engelleyicisi tarafından engellendi, ancak target = "_ blank" değil. İstemciden kendi web sitelerinden pop-up'ları etkinleştirmesini istemeli miyim?
Phillip Senn

7
Firefox gibi pop-up engelleyiciler tarafından engellenmeyen bir JavaScript çözümü var mı?
ma11hew28

4
@MattDiPasquale engelleme window.open biraz pop-up engelleyiciler noktasıdır! Aramayı bir tıklama işlemine yanıt olarak yaparsanız engellenmeme olasılığı daha yüksektir.
William Denniss

19

Bu yardımcı olabilir

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
    link.href = 'http://www.google.com';
    link.target = '_blank';
    var event = new MouseEvent('click', {
        'view': window,
        'bubbles': false,
        'cancelable': true
    });
    link.dispatchEvent(event);

IE11: "Çalışma Zamanı Javascript hatası: nesne için geçerli bir eylem değil"
T-moty

8
Bu yanıt neler olduğuna dair bazı açıklamalar ekleyerek geliştirilebilir
Elly Post

13

Bunun bir tamamlanmış ve çözülmüş bir anlaşma olduğunu biliyorum, ama işte sorunu çözmek için kullandığım şey.

if (!e.target.hasAttribute("target")) {
    e.preventDefault();     
    e.target.setAttribute("target", "_blank");
    e.target.click();
    return;
}

Temelde burada neler oluyor bağlantı target=_blanköznitelik olup olmadığını kontrol edin . Başlamazsa, bağlantının tetiklenmesini durdurur, yeni bir pencerede açılacak şekilde ayarlar ve ardından programlı olarak tıklar.

Bir adım ileri gidebilir ve orijinal tıklamanın durmasını atlayabilir (ve kodunuzu çok daha kompakt hale getirebilirsiniz):

if (!e.target.hasAttribute("target")) {
    e.target.setAttribute("target", "_blank");
}

Bir tarayıcı çapraz özellik ekleme uygulamasını soyutlamak için jQuery kullanıyorsanız, bunun yerine şunu kullanmalısınız e.target.setAttribute("target", "_blank"):

    jQuery(event.target).attr("target", "_blank")

Tam kullanım durumunuza uyacak şekilde yeniden çalışmanız gerekebilir, ancak kendi kaşıntımı nasıl çizdim.

İşte size karışıklık için bir demo .

(Jsfiddle'daki bağlantı bu tartışmaya geri dönüyor .. yeni bir sekmeye gerek yok :))


1
Bu cevabı hepsine tercih ederim, çünkü jquery kullanır ve window.open pop-up engelleyici sorunlarını önler. Bu, hedefi olmayan bağlantılar içeren bazı 3. taraf verileriyle uğraşırken tamamen meşru olur.
IncredibleHat

7

Şahsen tek bir bağlantı için ise aşağıdaki kodu kullanmayı tercih ederim. Aksi takdirde, benzer kodla bir işlev oluşturursanız muhtemelen en iyisidir.

onclick="this.target='_blank';"

W3C'nin XHTML katı testini atlamak için kullanmaya başladım.


1
Satır içi JavaScript, her yerde çalışan bir "standart dışı" özniteliği eklemekten daha dağınık olduğunu düşünüyorum.
Matti Virkkunen

@MattiVirkkunen bazı durumlarda tek çözümdür
Claudiu Creanga

1
@Claudiu: Kendinizi bu kadar saçma bir durumda bulursanız, nedeni etrafındaki çamurdan ziyade düzeltmeyi tercih etmelisiniz.
Matti Virkkunen

5

Ben jQuery ile nasıl yaparım. Yeni pencerede açılmasını istediğim her bağlantı için bir sınıfım var.

$(function(){

    $(".external").click(function(e) {
        e.preventDefault();
        window.open(this.href);
    });
});

2

Bir etiketten href ayıklayabilirsiniz:

window.open(document.getElementById('redirect').href);

1

Bu, tüm sayfa bağlantılarını açmanıza yardımcı olabilir :

$(".myClass").each(
     function(i,e){
        window.open(e, '_blank');
     }
);

Her şeyi açacak <a href="" class="myClass"></a> bağlantı öğesini, her birini tıklamış olduğunuz gibi başka bir sekmeye .

Yalnızca tarayıcı konsoluna yapıştırmanız gerekir. jQuery çerçevesi gerekli

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.