URL'yi yeni bir sekmede açma (yeni bir pencerede değil)


2102

Bir pop-up pencerenin aksine yeni bir sekmede bir URL açmaya çalışıyorum .

Yanıtların şöyle görüneceği ilgili sorular gördüm:

window.open(url,'_blank');
window.open(url);

Ama hiçbiri benim için çalışmadı, tarayıcı hala bir açılır pencere açmaya çalıştı.


85
Bu genellikle bir tercih meselesidir. Bazı insanlar pencereleri sever (ve bu davranışı şiddetle korur), bazı sekmeler (ve bu davranışı şiddetle korur). Yani, tasarım değil, genellikle bir tat meselesi olarak kabul edilen bir davranışı yenersiniz.
Jared Farrish

42
Javascript tarayıcınız ve sekmeler ve pencereler hakkında hiçbir şey bilmiyor, bu yüzden yeni bir pencere nasıl açacağınıza karar vermek gerçekten tarayıcıya bağlı.
Andrey

3
Chrome'u pop-up pencerenin aksine yeni bir sekmede gösterecek şekilde nasıl yapılandırabilirim?
Mark

8
Gmail bunu en azından Chrome'da bir şekilde yapar. Bir e-posta satırını Shift tuşunu basılı tutup tıklatın, o e-postayı yeni bir pencerede açarsınız. Ctrl + tıklayın ve yeni bir sekmede açın. Tek sorun: Gmail'in gizlenmiş kodunu kazmak bir PITA'dır
Sergio

48
@Sergio, bu herhangi bir bağlantı için varsayılan tarayıcı davranışıdır. (En azından Chrome ve Firefox için.) Gmail ile ilgisi yok.
Qtax

Yanıtlar:


929

Bir yazarın yapabileceği hiçbir şey yeni bir pencere yerine yeni bir sekmede açmayı seçemez; bir kullanıcı tercihi . (Çoğu tarayıcıda varsayılan kullanıcı tercihinin yeni sekmeler için olduğunu unutmayın, bu nedenle bu tercihin değiştirilmediği bir tarayıcıda önemsiz bir test bunu göstermeyecektir.)

CSS3 hedef yeni önerdi , ancak şartname terk edildi .

Ters doğru değildir; üçüncü argümanında pencere için boyutlar belirterek window.open(), tercih sekmeler için olduğunda yeni bir pencere tetikleyebilirsiniz.


42
@AliHaideri Javascript'in yeni sekmenin / pencerenin nasıl açıldığıyla ilgisi yoktur. Her şey tarayıcınızın ayarları tarafından belirlenir. Kullanarak window.opentarayıcıya yeni bir şey açmasını söyler, ardından tarayıcı ayarlarında seçilenleri açar - sekme veya pencere. Test ettiğiniz tarayıcılarda, sekme yerine yeni bir pencerede açılacak ayarları değiştirin; diğerlerinin çözümlerinin yanlış olduğunu görürsünüz.
Ian

239
Başkalarının zamanını onlara bir şey söylemekten daha fazla harcayan iki şey yapılamaz. (1) Onlara yapılamayacak bir şey söylemek yapılabilir. (2) Sessiz kalmak ve yapılamayacak bir şey yapmanın bir yolunu aramaya devam etmek.
Quentin

8
@Cupcake - Dokümantasyon genellikle mevcut olmayan özellikleri açıklama zahmetine girmez. evernote.com/shard/s3/sh/428d2d68-39f9-491d-8352-8a9c217b67d7/…
Quentin

9
@Neel - Çünkü birçok insanın bilmek istediği bir konuya kısa sürede varıyor.
Quentin

4
Yazarlar bir şeyler yapabilir (çoğunlukla farklı kodlar yazar). Bunların hiçbiri bir pencere yerine bir sekmeyi tetiklemeyecektir.
Quentin

1733

Bu bir hile,

function openInNewTab(url) {
  var win = window.open(url, '_blank');
  win.focus();
}

Çoğu durumda, bu, onclickaçılır pencere engelleyicilerini ve varsayılan "yeni pencere" davranışını önlemek için bağlantının doğrudan işleyicide gerçekleşmelidir . Bunu bu şekilde veya DOMnesnenize bir olay dinleyicisi ekleyerek yapabilirsiniz .

<div onclick="openInNewTab('www.test.com');">Something To Click On</div>

http://www.tutsplanet.com/open-url-new-tab-using-javascript/


117
Çalışmıyor. Adres çubuğunun sağında bir mesaj var: Açılır pencere engellendi . Sonra pop-up'lara izin verdim. Ve voilà, bir sekmede değil, bir açılır pencerede açılır ! OS X Lion üzerinde Chrome 22.0.1229.94.
nalply

39
@ b1naryatr0phy Bunun nedeni gerçekten düzgün bir şekilde test etmemenizdi. Tarayıcılarınızdaki ayarları değiştirin. Bir sekme veya pencerede açılıp açılmadığı, tarayıcınızın ayarları tarafından belirlenir. Yeni pencerenin / sekmenin nasıl açılacağını seçmek için window.open'i (veya herhangi bir Javascript'i) arayarak yapabileceğiniz hiçbir şey yoktur.
Ian

Soru: URL'yi protokol olmadan ayarladım (örneğin, sitem.com/Controller/Index). Sonuç olarak yeni sayfanın (sekme) url tarafından mevcut sayfanın url'si (i OpenInNewTab fonksiyonunu kullandığım yerden) artı fonksiyon url'sine geçtim. Protokol penceresi ile doğru bağlantı ile açılır. Neden?
user2167382

2
var win = window.open (url, '_blank'); '_blank' gerekli değildir, window.open () için ikinci parametre strWindowName'dir, için: Yeni pencere için bir dize adı. Adı, <a> veya <form> öğesinin target niteliğini kullanarak bağlantıların ve formların hedefi olarak kullanılabilir. Ad, boşluk karakteri içermemelidir. StrWindowName'in yeni pencerenin başlığını belirtmediğini unutmayın.
hydRAnger

Bunu, korumalı alanlı iframe olmadan yeni bir sekme açmanın herhangi bir yolu var mı? Bunu kullandığımda, ifORS olarak açıldığından document.domain değeri değiştirilmediğinden CORS hataları alıyorum.
Ids van der Zee

380

window.open()gerçek tıklama etkinliğinde gerçekleşmiyorsa yeni bir sekmede açılmaz. Verilen örnekte, URL gerçek tıklama etkinliğinde açılıyor. Bu, kullanıcının tarayıcıda uygun ayarlara sahip olması koşuluyla çalışır .

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

Benzer şekilde, tıklama işlevi içinde bir Ajax çağrısı yapmaya çalışıyorsanız ve başarılı bir şekilde bir pencere açmak istiyorsanız, async : falseseçenek kümesiyle Ajax çağrısını yaptığınızdan emin olun .


28
Bunu DOĞRU cevap olarak işaretlemek güzel olurdu. Chrome v26 (Windows) ile yaptığım testler, kod bir düğmenin tıklama işleyicisindeyse yeni bir sekme açtığını ve kodun programlı olarak, örneğin konsoldan çağrıldığını, yeni bir pencere açtığını doğrular.
CyberFonic

2
@Ian Varsayılan ayarlara sahip tarayıcıları test ettiğimde, bu cevap yukarıdaki cevapların bulunmadığı durumlarda işe yarar. "Yapabileceğiniz hiçbir şey yok" yazan kabul edilen cevap yalnızca kullanıcı varsayılan ayarları değiştirdiğinde doğrudur.
Garfield

@Ian Anlaşılır olması için, kullanıcı ayarları hakkındaki yanıt uyarısında bundan bahsettim. "Bu, kullanıcının tarayıcıda uygun ayarlara sahip olması koşuluyla çalışır." Kullanıcıların çoğunun tarayıcı ayarlarını değiştirmediğini düşünüyorum ve bu cevap çoğu için işe yarıyor.
Venkat Kotra

async: falseChrome'da çalışmıyor. Geri aramadan yeni bir pencere açmak için, HTTP isteğini göndermeden önce boş bir pencere açmanız ve daha sonra güncellemeniz gerekir. İşte iyi bir kesmek .
attacomsian

250

window.open Tüm Tarayıcılarda Yeni Bir Sekmede Açılır Pencere Güvenilir Bir Şekilde Açılamıyor

Farklı tarayıcılar window.open , özellikle kullanıcının tarayıcı tercihlerine göre davranışını farklı şekillerde uygular . window.openBir kullanıcının tarayıcı tercihlerini farklı şekilde ele almaları nedeniyle , aynı davranışın tüm Internet Explorer, Firefox ve Chrome'da doğru olmasını bekleyemezsiniz .

Örneğin, Internet Explorer (11) kullanıcıları pop-up'ları yeni bir pencerede veya yeni bir sekmede açmayı seçebilir, Internet Explorer 11 kullanıcılarını Quentin'in cevabındawindow.open belirtildiği gibi pop-up'ları belirli bir şekilde açmaya zorlayamazsınız .

Firefox (29) kullanıcılarına gelince window.open(url, '_blank') , kullanımı tarayıcılarının sekme tercihlerine bağlıdır, ancak yine de bir genişlik ve yükseklik belirterek pop-up'ları yeni bir pencerede açmaya zorlayabilirsiniz (aşağıdaki "Chrome Nedir?" Bölümüne bakın).

gösteri

Tarayıcınızın ayarlarına gidin ve açılır pencereleri yeni bir pencerede açacak şekilde yapılandırın.

Internet Explorer (11)

Internet Explorer ayarları iletişim kutusu 1

Internet Explorer sekmesi ayarları iletişim kutusu

Test Sayfası

Internet Explorer'ı (11) açılır pencereleri yukarıda gösterildiği gibi yeni bir pencerede açacak şekilde ayarladıktan sonra, test etmek için aşağıdaki test sayfasını kullanın window.open:

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
      <code>window.open(url)</code>
    </button>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
      <code>window.open(url, '_blank')</code>
    </button>
  </body>
</html>

Açılır pencerelerin yeni bir sekmede değil, yeni bir pencerede açıldığını gözlemleyin .

Ayrıca, yukarıdaki snippet'leri Firefox'ta (29) sekme tercihi yeni pencerelere ayarlanmış olarak test edebilir ve aynı sonuçları görebilirsiniz.

Chrome Nedir? window.openInternet Explorer (11) ve Firefox'tan (29) farklı olarak uygular .

% 100 emin değilim, ancak 34.0.1847.131 mkullanıcının pop-up'ları yeni bir pencerede veya yeni bir sekmede (Firefox ve Internet Explorer gibi) açıp açmamayı seçmek için kullanabileceği ayarların Chrome (sürüm ) olmadığı anlaşılıyor Sahip olmak). Chrome belgelerini pop-up'ları yönetmek için kontrol ettim , ancak bu tür bir şeyden bahsetmedi.

Ayrıca, bir kez daha, farklı tarayıcılar window.open farklı davranışlar sergiliyor gibi görünüyor . Chrome ve Firefox'ta, bir kullanıcı Firefox'u (29) yeni bir sekmede yeni pencereler açmaya ayarlamış olsa bile ( genişlik ve yükseklik belirtilmesi bir açılır pencere zorlar ) ( JavaScript'in yanıtlarının sekmede değil yeni bir pencerede açıldığı gibi ) :

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>

  <body>
    <button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
      <code>window.open(url)</code>
    </button>
  </body>
</html>

Ancak, kullanıcılar tarayıcı tercihleri ​​olarak sekmeler ayarlarsa, genişlik ve yükseklik belirtmemek bile yeni bir pencere açılır penceresini zorlamayacaksa , yukarıdaki aynı kod snippet'i Internet Explorer 11'de her zaman yeni bir sekme açar.

Bu nedenle window.openChrome'daki davranışı, bir onclicketkinlikte kullanıldığında açılır pencereleri yeni bir sekmede açmak, tarayıcı konsolundan kullanıldığında yeni pencerelerde açmak ( diğer kişiler tarafından belirtildiği gibi ) ve genişlik ve yükseklik ile belirtilir.

özet

Farklı tarayıcılar window.open , kullanıcıların tarayıcı tercihlerine göre farklı davranışlar uygular . window.openBir kullanıcının tarayıcı tercihlerini farklı şekilde ele almaları nedeniyle , aynı davranışın tüm Internet Explorer, Firefox ve Chrome'da doğru olmasını bekleyemezsiniz .

İlave Okuma


12
Soruyu cevaplamadınız, sadece window.open tutarsız olduğunu kanıtladınız.
BentOnCoding

223

Bir astar:

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

Sanal bir aöğe oluşturur , target="_blank"yeni bir sekmede açılmasını sağlar, düzgün bir şekilde verir url hrefve sonra tıklar.

İsterseniz buna dayanarak bazı işlevler oluşturabilirsiniz:

function openInNewTab(href) {
  Object.assign(document.createElement('a'), {
    target: '_blank',
    href,
  }).click();
}

ve sonra şöyle kullanabilirsiniz:

openInNewTab("https://google.com"); 

Önemli Not:

openInNewTab(ve bu sayfadaki diğer çözümlerin yanı sıra) kullanıcı işlemi geri araması sırasında çağrılmalıdır - ör. tıklama etkinliği içinde (doğrudan geri arama işlevinde gerekli değildir, ancak tıklama işlemi sırasında).

Manuel olarak rastgele bir anda arayacaksanız (örneğin bir aralıkta veya sunucu yanıtından sonra) - tarayıcı tarafından engellenebilir (bu bir güvenlik riski olacağı mantıklı olabilir ve çok kötü kullanıcı deneyimine yol açabilir) )


8
Teşekkür ederim. Pure-JS'nizin eksik bir parçası var - Luke Alderton'un yazdığı gibi (aşağıya bakın), oluşturulan öğeyi belge gövdesine eklemeniz gerekir, kodunuzda boşlukta asılıdır ve en azından Firefox 37'de hiçbir şey yapmaz .
greenoldman

4
@mcginniwa Böyle bir eylem - fare tıklaması gibi kullanıcı eylemi tarafından tetiklenmezse, açılır pencere engelleyiciyi açar. Kullanıcı eylemi olmadan herhangi bir URL'yi Javascript ile açabileceğinizi düşünün - bu oldukça tehlikeli olacaktır. Bu kodu tıklama işlevi gibi bir etkinliğe koyarsanız - iyi çalışır - burada önerilen tüm çözümlerle aynıdır.
pie6k

4
Kodunuzu aşağıdaki gibi basitleştirebilirsiniz: $('<a />',{'href': url, 'target', '_blank'}).get(0).click();
shaedrich

5
@shaedrich ilham sizin snipped jquery olmayan bir astar ekledi:Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
pie6k

FF'de çalışmıyor!
Nolesh

91

Eğer kullanırsan window.open(url, '_blank') , bu Chrome (pop-up engelleyici) engellenecektir.

Bunu dene:

//With JQuery

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

Saf JavaScript ile,

document.querySelector('#myButton').onclick = function() {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
};

Ancak bu soruda site yazarından bahsetmiyorlar. Bir URL'yi yalnızca yeni pencerede veya yeni sekmede açmak istiyorum. Bu tarayıcıya bağlıdır. Yazar hakkında endişelenmemize gerek yok. Lütfen bu kemaný kontrol et. İşe yarıyor
Mohammed Safeer

Js keman ve dalgıç üzerinde çalışmadığı, ancak bir html dosyası oluşturduğunuzda çalıştığı bulundu. Çünkü js keman, çıkış iframe üzerinde görüntülenir, bu nedenle yeni pencere engellendithe request was made in a sandboxed frame whose 'allow-popups' permission is not set
Mohammed Safeer

67

Steven Spielberg'in cevabını detaylandırmak için bunu böyle bir durumda yaptım:

$('a').click(function() {
  $(this).attr('target', '_blank');
});

Bu şekilde, tarayıcı bağlantıyı takip etmeden hemen önce hedef niteliği ayarlıyorum, bu yüzden bağlantı yeni bir sekmede veya pencerede açık hale getirilecek ( kullanıcı ayarlarına bağlıdır ).

JQuery'de bir satır örneği:

$('a').attr('target', '_blank').get(0).click();
// The `.get(0)` must be there to return the actual DOM element.
// Doing `.click()` on the jQuery object for it did not work.

Bu, yalnızca yerel tarayıcı DOM API'leri kullanılarak da gerçekleştirilebilir:

document.querySelector('a').setAttribute('target', '_blank');
document.querySelector('a').click();

58

Aşağıdakileri kullanıyorum ve çok iyi çalışıyor!

window.open(url, '_blank').focus();

2
Bu, tarayıcı ayarlarına bağlı olarak yeni bir sekmede veya pencerede açılabilir. Soru, tercihler yeni bir pencere için olsa bile özellikle yeni bir sekmede açılmasıyla ilgilidir.
Quentin


19

İlginç bir gerçek, eylem kullanıcı tarafından çağrılmazsa (bir düğmeye veya bir şeye tıklanırsa) veya senkronize değilse, yeni sekmenin açılamamasıdır, örneğin, bu yeni sekmede açılmayacaktır:

$.ajax({
    url: "url",
    type: "POST",
    success: function() {
        window.open('url', '_blank');              
    }
});

Ancak bu, tarayıcı ayarlarına bağlı olarak yeni bir sekmede açılabilir:

$.ajax({
    url: "url",
    type: "POST",
    async: false,
    success: function() {
        window.open('url', '_blank');              
    }
});

2
Bu, tüm stok ayarlarında Firefox 28, Chrome 34b ve Safari 7.0.2'de bir açılır pencere olarak engelleniyor. :(
Steve Meisner

1
"işlem kullanıcı tarafından başlatılmazsa (bir düğmeyi veya başka bir şeyi tıklarsa) veya eşzamansızsa yeni sekme açılamaz" - Chrome için doğru, ancak tüm tarayıcılar için doğru değil. <script>open('http://google.com')</script>Bir .htmldosyaya kaydedin ve Firefox'un son sürümünün yeni yüklemesinde açın; Firefox'un Google'ı yeni bir sekmede (belki de pop-up'lara izin vermesini söyledikten sonra) yeni bir pencerede değil, mutlu bir şekilde açtığını göreceksiniz.
Mark Amery

13

Sadece [strWindowFeatures] parametrelerini atlamak yeni bir sekme açar, tarayıcı ayarını geçersiz kılar (tarayıcı ayarı JavaScript'i etkiler).

Yeni Pencere

var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);

Yeni sekme

var myWin = window.open(strUrl, strWindowName);

- veya -

var myWin = window.open(strUrl);

11
(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))

11

Şununla bir numara kullanabilirsiniz form:

$(function () {
    $('#btn').click(function () {
        openNewTab("http://stackoverflow.com")
        return false;
    });
});

function openNewTab(link) {
    var frm = $('<form   method="get" action="' + link + '" target="_blank"></form>')
    $("body").append(frm);
    frm.submit().remove();
}

jsFiddle demosu


4
Bu yöntemle giderseniz, URL'nin sorgu gönderme parametrelerine sahip olmadığından emin olun çünkü form gönderme tarafından atlanırlar. Çözümlerden biri, sorgu parametrelerinin içindeki tüm parametreler için nameanahtar ve valuedeğer olarak gizli giriş öğelerini form öğesinin içine gömmektir. Ve sonra formu gönderin
Mudassir Ali

bu daha basit bir a çok bir form yerine etiketle ve .click()bunu "göndermek" için jQuery yöntemini kullanarak yapılabilir . cevabımı

10

Bunun tarayıcı ayarları ile ilgisi yokÖzel bir işlevden yeni bir sekme açmaya çalışıyorsanız bunun .

Bu sayfada bir JavaScript konsolu açın ve şunu yazın:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();

'Tıklama' özel bir işlemden geldiğinden ayarlarınıza bakılmaksızın bir açılır pencere açmaya çalışacaktır.

Bir bağlantıda gerçek bir 'fare tıklaması' gibi davranmak için @ spirinvladimir'in tavsiyelerine uymanız ve gerçekten oluşturmanız gerekir:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").dispatchEvent((function(e){
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                    false, false, false, false, 0, null);
  return e
}(document.createEvent('MouseEvents'))));

İşte tam bir örnek ( jsFiddle veya benzeri çevrimiçi editörlerde denemeyin , oradan harici sayfalara yönlendirmenize izin vermeyecektir):

<!DOCTYPE html>
<html>
<head>
  <style>
    #firing_div {
      margin-top: 15px;
      width: 250px;
      border: 1px solid blue;
      text-align: center;
    }
  </style>
</head>
<body>
  <a id="my_link" href="http://www.google.com"> Go to Google </a>
  <div id="firing_div"> Click me to trigger custom click </div>
</body>
<script>
  function fire_custom_click() {
    alert("firing click!");
    document.getElementById("my_link").dispatchEvent((function(e){
      e.initMouseEvent("click", true, true, window, /* type, canBubble, cancelable, view */
            0, 0, 0, 0, 0,              /* detail, screenX, screenY, clientX, clientY */
            false, false, false, false, /* ctrlKey, altKey, shiftKey, metaKey */
            0, null);                   /* button, relatedTarget */
      return e
    }(document.createEvent('MouseEvents'))));
  }
  document.getElementById("firing_div").onclick = fire_custom_click;
</script>
</html>

1
Yapmam Başka bir çözüme gidiş sona erdi w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)göre theandystratton.com/2012/...
Paul Tomblin

11
@FahadAbidJanjua Kesinlikle doğru değil . Yine de tarayıcı ayarlarına bağlıdır. HTML veya Javascript spesifikasyonlarında "özel eylem" in bir sekme yerine bir açılır pencerede açılması gerektiğini bildiren hiçbir şey yoktur. Aslında, şu anki makinemdeki tarayıcıların hiçbiri bu davranışı göstermiyor.
nmclean

7
function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}

1
Bu, tarayıcı ayarlarına bağlı olarak yeni bir sekmede veya pencerede açılabilir. Soru, tercihler yeni bir pencere için olsa bile özellikle yeni bir sekmede açılmasıyla ilgilidir.
Quentin

3

JQuery

$('<a />',{'href': url, 'target': '_blank'}).get(0).click();

JS

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

Bu, tarayıcı ayarlarına bağlı olarak yeni bir sekmede veya pencerede açılabilir. Soru, tercihler yeni bir pencere için olsa bile özellikle yeni bir sekmede açılmasıyla ilgilidir.
Quentin

2

Veya bir bağlantı öğesi oluşturabilir ve tıklayabilirsiniz ...

var evLink = document.createElement('a');
evLink.href = 'http://' + strUrl;
evLink.target = '_blank';
document.body.appendChild(evLink);
evLink.click();
// Now delete it
evLink.parentNode.removeChild(evLink);

Bu herhangi bir açılır pencere engelleyicisi tarafından engellenmemelidir ... Umarım.


2

Bu sorunun bir cevabı var ve hayır değil.

Kolay bir iş buldum:

1. Adım: Görünmez bir bağlantı oluşturun:

<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>

2. Adım: Programla bu bağlantıyı tıklayın:

document.getElementById("yourId").click();

Hadi bakalım! Benim için bir cazibe çalışır.


Bu, tarayıcı ayarlarına bağlı olarak yeni bir sekmede veya pencerede açılabilir. Soru, tercihler yeni bir pencere için olsa bile özellikle yeni bir sekmede açılmasıyla ilgilidir.
Quentin

1

resim açıklamasını buraya girin

Yeni sekme açma ve aynı sekmede kalma hakkında birçok bilgi araştırdım. Bunu yapmak için küçük bir numara buldum. Açmanız gereken URL'niz olduğunu varsayalım - newUrl ve old url - currentUrl , yeni sekme açıldıktan sonra kalmanız gerekir. JS kodu aşağıdaki gibi görünecektir:

// init urls
let newUrl = 'http://example.com';
let currentUrl = window.location.href;
// open window with url of current page, you will be automatically moved 
// by browser to a new opened tab. It will look like your page is reloaded
// and you will stay on same page but with new page opened
window.open(currentUrl , '_blank');
// on your current tab will be opened new url
location.href = newUrl;

Soru, kullanıcının tercihi yeni pencerelerde açmak olduğunda yeni bir sekme açmaktır. Mevcut sekmede aynı anda başka bir URL açarken yeni bir sekmede URL'nin nasıl açılacağını sormaz.
Quentin

0

Nasıl oluşturma hakkında <a>sahip _blankolduğu targetözellik değeri ve urlolduğu gibihref stil ekran,: aa çocuklar elemanı ile gizli? Ardından DOM'ye ekleyin ve alt öğedeki click olayını tetikleyin.

GÜNCELLEME

Bu işe yaramıyor. Tarayıcı varsayılan davranışı önler. Programlı olarak tetiklenebilir, ancak varsayılan davranışı izlemez.

Kontrol edin ve kendiniz görün: http://jsfiddle.net/4S4ET/


-1

Bir Firefox (Mozilla) uzantısından yeni bir sekme açmak şu şekildedir:

gBrowser.selectedTab = gBrowser.addTab("http://example.com");

-1

Bu yol yukarıdaki çözüme benzer ancak farklı şekilde uygulanır

.social_icon -> CSS ile bazı sınıflar

 <div class="social_icon" id="SOME_ID" data-url="SOME_URL"></div>


 $('.social_icon').click(function(){

        var url = $(this).attr('data-url');
        var win = window.open(url, '_blank');  ///similar to above solution
        win.focus();
   });

-1

Bu bir saldırı olabilir, ancak Firefox'ta üçüncü bir parametre 'fullscreen = yes' belirtirseniz yeni bir pencere açar.

Örneğin,

<a href="#" onclick="window.open('MyPDF.pdf', '_blank', 'fullscreen=yes'); return false;">MyPDF</a>

Tarayıcı ayarlarını geçersiz kılıyor gibi görünüyor.


-1

Bu iş benim için, sadece olayı önlemek, url ekleyin ve <a> tagardından tıklama olayını tetikleyin tag.

Js
$('.myBtn').on('click', function(event) {
        event.preventDefault();
        $(this).attr('href',"http://someurl.com");
        $(this).trigger('click');
});
HTML
<a href="#" class="myBtn" target="_blank">Go</a>

Bu, tarayıcı ayarlarına bağlı olarak yeni bir sekmede veya pencerede açılabilir. Soru, tercihler yeni bir pencere için olsa bile özellikle yeni bir sekmede açılmasıyla ilgilidir.
Quentin

-1

window.open(url)Yeni tarayıcı Sekmesinde url açılacaktır. Belowe JS alternatifi

let a= document.createElement('a');
a.target= '_blank';
a.href= 'https://support.wwf.org.uk/';
a.click(); // we don't need to remove 'a' from DOM because we not add it

işte örnek (stackoverflow snippet'leri yeni sekme açmaya izin vermiyor)


"Window.open (url) yeni tarayıcı sekmesinde URL'yi açar" - Kullanıcının yeni bir pencere veya yeni bir sekme tercihini izler. Tercih bir pencere için olduğunda yeni bir sekmeyi zorlamaz. (Sorunun konusu budur). Aynısı target = _blank için de geçerlidir.
Quentin

Her iki yaklaşım da bu soruya daha önce cevaplanmamış 56 cevapta birçok kez belirtilmiş (ve eleştirilmiştir).
Quentin

-1

URL'yi yeni bir sekmede mi yoksa yeni bir pencerede mi açacağınız, aslında kullanıcının tarayıcı tercihleri ​​tarafından kontrol edilir. JavaScript'te geçersiz kılmanın bir yolu yoktur.

window.open()nasıl kullanıldığına bağlı olarak farklı davranır. Bir kullanıcı işleminin doğrudan bir sonucu olarak çağrılırsa , bir düğmeye tıklama diyelim, iyi çalışmalı ve yeni bir sekme (veya pencere) açmalıdır:

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {
    // open a new tab
    const tab = window.open('https://attacomsian.com', '_blank');
});

Ancak, AJAX isteği geri aramasından yeni bir sekme açmaya çalışırsanız , tarayıcı doğrudan kullanıcı eylemi olduğu için bu engeller.

To pop-up engelleyici baypas bir geri gelen yeni bir sekme açın ve burada bir olduğunu biraz kesmek :

const button = document.querySelector('#openTab');

// add click event listener
button.addEventListener('click', () => {

    // open an empty window
    const tab = window.open('about:blank');

    // make an API call
    fetch('/api/validate')
        .then(res => res.json())
        .then(json => {

            // TODO: do something with JSON response

            // update the actual URL
            tab.location = 'https://attacomsian.com';
            tab.focus();
        })
        .catch(err => {
            // close the empty window
            tab.close();
        });
});

-1

Bu şekilde denedim ve iyi çalışıyor gibi görünüyor

window.open('example.com', 'newWin');

Burada birçok çalışma örneği buldum:

http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl


Bu, kullanıcının tercihine göre yeni bir sekmede veya pencerede açılır. Sorunun konusu olan yeni bir sekmeyi zorlamaz.
Quentin


@Quentin Bu bölümü kaçırdım, ancak ikinci pencere «windowName» ile «_blank» 'e eşit veya hiç olmadan, window.open öğesini çağırmaya çalıştığımda, en son Google Chrome'da açılır pencere veya yeni sekme görünmedi. Pencere adını «newWin» olarak değiştirdiğimde yeni bir sekme açılmıştı. Pencere adı parametresi isteğe bağlı olduğu için garip.
Artem Shevtsov

-4

Yazan kişiyle biraz anlaşacağım (burada başka kelimelerle yazılmış): "Mevcut bir web sayfasındaki bir bağlantı için, yeni sayfa aynı web sitesinin bir parçasıysa tarayıcı her zaman yeni bir sekmede bağlantıyı açar mevcut web sayfasına. " En azından benim için bu "genel kural" Chrome, Firefox, Opera, IE, Safari, SeaMonkey ve Konqueror'da çalışıyor.

Her neyse, diğer kişinin sunduğu şeyden yararlanmanın daha az karmaşık bir yolu var. Tarayıcının ne yaptığını kontrol etmek istediğiniz kendi web sitenizden (aşağıda "thissite.com") bahsettiğimizi varsayarsak, aşağıda "specialpage.htm" ifadesinin EMPTY olmasını, hiç HTML olmaması ( sunucudan veri gönderme zaman kazandırır!).

 var wnd, URL;  //global variables

 //specifying "_blank" in window.open() is SUPPOSED to keep the new page from replacing the existing page
 wnd = window.open("http://www.thissite.com/specialpage.htm", "_blank"); //get reference to just-opened page
 //if the "general rule" above is true, a new tab should have been opened.
 URL = "http://www.someothersite.com/desiredpage.htm";  //ultimate destination
 setTimeout(gotoURL(),200);  //wait 1/5 of a second; give browser time to create tab/window for empty page


 function gotoURL()
 { wnd.open(URL, "_self");  //replace the blank page, in the tab, with the desired page
   wnd.focus();             //when browser not set to automatically show newly-opened page, this MAY work
 }

-7

Yalnızca harici bağlantıları (diğer sitelere giden bağlantılar) açmak istiyorsanız, bu JavaScript / jQuery biti iyi çalışır:

$(function(){
    var hostname = window.location.hostname.replace('www.', '');
    $('a').each(function(){
        var link_host = $(this).attr('hostname').replace('www.', '');
        if (link_host !== hostname) {
            $(this).attr('target', '_blank');
        }
    });
});

Bu yanıt bu soru için uygun değil. Fikriniz için teşekkürler!
Nuri Akman

-9

Bağlantı aynı etki alanındaysa (aynı web sitesinde) tarayıcı her zaman bağlantıyı yeni bir sekmede açar. Bağlantı başka bir alandaysa, tarayıcı ayarlarına bağlı olarak bağlantıyı yeni bir sekmede / pencerede açar.

Buna göre şunu kullanabiliriz:

<a class="my-link" href="http://www.mywebsite.com" rel="http://www.otherwebsite.com">new tab</a>

Ve bazı jQuery kodu ekleyin:

jQuery(document).ready(function () {
    jQuery(".my-link").on("click",function(){
        var w = window.open('http://www.mywebsite.com','_blank');
        w.focus();
        w.location.href = jQuery(this).attr('rel');
        return false;
    });
});

Bu nedenle, ilk olarak _blank target ile aynı web sitesinde yeni bir pencere açın (yeni sekmede açılır) ve sonra istediğiniz web sitesini bu yeni pencerede açın.

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.