JavaScript sekmede değil, yeni bir pencerede açılır


364

window.open(url)Bir öğe seçildiğinde çağıran bir seçim kutusu var . Firefox sayfayı varsayılan olarak yeni bir sekmede açar. Ancak, sayfanın yeni bir sekmede değil, yeni bir pencerede açılmasını istiyorum.

Bunu nasıl başarabilirim?




Yanıtlar:


456

Pencereye width / height ile bir 'specs' parametresi verin. Olası tüm seçenekler için buraya bakın .

window.open(url, windowName, "height=200,width=200");

Bir genişlik / yükseklik belirttiğinizde, onu sekme yerine yeni bir pencerede açar.


5
İyi bahşiş. Bence Opera yine de bunu bir sekmede açacak :).
Kevin Tighe

7
IE6, FF 3.6, Chrome 9.0'da çalışma
James Westgate

3
FF 11.0'da artık çalışmıyor, soruma bakın ! @James
TMS

14
Günümüz tarayıcılarında çalışmaz. Varsayılan olarak, tümü geçerli pencerenin yeni bir sekmesinde yeni bir pencere açar. Ayrıca tarayıcı seçeneklerine de bağlıdır. JavaScript kullanarak kontrol edemezsiniz.
Pavel Hodek

3
Bu, yeni bir pencerede açmayı gerçekleştiren "height = 200, width = 200" ifadesini koymanız DEĞİLDİR. Bu sadece ekstra parametre koymak için bir gerçek (konum, durum vb .... önemli değil)
Peter

110

Yüksekliği kullanmanıza gerek yoktur, sadece kullandığınızdan emin olun _blank, onsuz, yeni bir sekmede açılır.

Boş bir pencere için:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

Belirli bir URL için:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');

3
Ama ya ona bir isim vermek istersem?
Aditi

En azından Chrome'da, location=0JS bir düğme veya bağlantı öğesinden çağrıldığında gereklidir.
Ohad Schneider

mükemmel çalıştı. firefox'ta konum = 0 içermesi gerekiyordu.
Rick james

@nwbrad '_blank' bölümünden emin misiniz çünkü bildiğim kadarıyla '_blank' başka bir değer belirtmediğimizde varsayılan değerdir. Sizin durumunuzda, yeni bir sekme yerine yeni bir pencere açmak, window.open işlevine 3. parametrenin sağlanmasıyla ilgili bir şeyler yapmalıdır. Sizin durumunuzda 'araç çubuğu = 0, konum = 0, menubar = 0'dır. Bu üçüncü parametreyi atlayıp 2. parametre olarak orada '_blank' bırakarak doğrulayabilirsiniz.
user1451111

Firefox 76 ve Internet Explorer 11 gibi modern tarayıcılarda mükemmel çalışır. İpucu, location=0parametreleri ekliyor . Ayrıca _blank, kullanıcı, pop-up'ı açan öğeyi birkaç kez tıklarsa ve focus()zaten açık bir pop-up odağı alacak şekilde zincirleme yaparsa, aynı pencereyi tekrar kullanmak için, hedefi kullanmak yerine pencereyi adlandırmayı öneririm :window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
OuzoPower

82

Yanılıyor olabilirim, ancak anladığım kadarıyla, bu kullanıcının tarayıcı tercihleri ​​tarafından kontrol edilir ve bunun geçersiz kılınabileceğine inanmıyorum.


1
Haklısınız, kullanıcı "about: config" tercihi "browser.tabs.opentabfor.windowopen" değerini true olarak ayarlayabilir, ancak bu global bir ayardır ve kullanıcı tarayıcılarımızın genel davranışını değiştirmek istemiyorum;)
adam

45
Sana işe yarayan bir kodum olduğunu söyledim. Bunu kundakçı konsoluna yazdım: window.open ("", "poop", "height = 200, width = 200, modal = yes, alwaysRaised = yes"); ve tahmin et ne oldu??? işe yarıyor!!!!!!

24
Evet işe yarıyor, ama bu biraz hack gibi görünüyor. Firefox, yeni bir pencere ve sekme açmak, bir javascript tercihi değil, bir tarayıcı tercihi olacak şekilde yazılmıştır. Bu nedenle, önerinizin firefox'un sonraki bir sürümünde aynı şekilde çalışmayacağı mümkündür. Kesmek istemem.
adam

2
Ve net olmak gerekirse, bunun bir javascript kesmek olduğunu kastetmiyorum. Pencere yüksekliği ve genişliği eklemek açıkça js window.open yönteminin özellikleridir ( w3schools.com/HTMLDOM/met_win_open.asp ) Firefox'un amaçlanan davranışını manipüle etme anlamında kesmek demek istiyorum.
adam

2
Ben buna gerçekten bir kesmek demezdim. Sadece hangi davranışa sahip olmak istediğinizden ödün veriyorsunuz ve bunun yerine onu uyguluyorsunuz.
Matchu

15

Deneyin:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

Ne dediğini yapan bazı kod var, ama parametreler çok şey var. Bence bunlar asgari düzeyde, işe yaramazsa bana bildirin, gerisini göndereceğim.


Bu, yalnızca "modal = yes" seçeneğini kullanarak FF 31 ve Chrome 36'da çalışır. Belirtilen tüm seçenekler de işe yarar. Ayrıca FF tercihlerimde "Yeni sekmelerde yeni pencereler aç" ı işaretledim. Açık seçenekler olmadan, pencereler yeni sekmede açılır.
Clint Pachl

Biraz daha testten sonra, neredeyse en az bir parametre olduğu sürece hemen hemen tüm parametreler görünüyor ― sekme yerine yeni bir pencere açacaktır. Örneğin, sadece "top = 0", FF 31 ve Chrome 36'da bile çalışır. Bu, cwm pencere yöneticisi kullanılarak OpenBSD'de. Dolayısıyla sonuçlar değişebilir.
Clint Pachl

Bilebilir miyim, [pencere adı] nedir?
adet

10

Tamam, çok fazla test yaptıktan sonra, benim sonucum:

Yaptığınız zaman:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

veya hedef alana ne koyarsanız koyun, hiçbir şey değişmez: yeni sayfa yeni bir sekmede açılır (dolayısıyla kullanıcı tercihine bağlıdır)

Sayfanın yeni bir "gerçek" pencerede açılmasını istiyorsanız, fazladan parametre koymanız gerekir. Sevmek:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

Test ettikten sonra, kullandığınız ekstra parametre gibi görünüyor, gerçekten önemli değil: bu, "bu parametreyi" veya "bu diğerini" yeni "gerçek pencereyi" oluşturan gerçek değil, ancak yeni parametreler var. ).

Ancak bir şey karıştırılır ve birçok yanlış yanıtı açıklayabilir:

Bu:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

Ve bu:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

aynı sonucu vermeyecektir.

İlk durumda, ek parametre olmadan bir sayfayı ilk açtığınızda , yeni bir sekmede açılır . Ve bu durumda, verdiğiniz ad nedeniyle ikinci çağrı da bu sekmede açılır .

İkinci durumda, ilk aramanız ekstra parametre ile yapıldığından , sayfa yeni bir " gerçek pencerede " açılacaktır . Ve bu durumda, ikinci çağrı ekstra parametre olmadan yapılsa bile, bu yeni " gerçek pencerede " de açılacaktır ... aynı sekmede!

Bu, sayfanın nereye yerleştirileceğine karar verdiği için ilk aramanın önemli olduğu anlamına gelir.


Bu cevabın bir sürü ++++ olması gerekir
Mitch VanDuyn

9

Gerek yok. Kullanıcının istediği tercihlere sahip olmasına izin verin.

Firefox bunu varsayılan olarak yapar, çünkü yeni bir pencerede bir sayfa açmak can sıkıcıdır ve kullanıcının istediği şey değilse bir sayfanın bunu yapmasına asla izin verilmemelidir. (Firefox, bu şekilde ayarlarsanız sekmeleri yeni bir pencerede açmanıza izin verir).


31
sen çok yanlışsın. ve bu arada, "gerekmemelisiniz" demek uygun değildir, özellikle de patronun istediği bir

8
Yorumları pratik ve yararlı tutmaya çalışalım. Hakaret etmeden anlaşamadık.
adam

17
@theman_on_vista: Patronunuzu ikna etmek sizin sorumluluğunuzdadır. Şirketiniz, tasarım sorunlarını çözme sorumluluğunu size verdi. Bu, yanlış tasarım fikirlerini belirtmeyi içerir.
EFraim

2
Çok doğru. Ekran kullanıcıya aittir ve başka hiç kimse yoktur.
Christopher Creutzig

12
Açılır pencere veya sekme seçmek tasarımcı alanındadır. Her zaman sekmeleri tercih eden bir kullanıcı olduğum halde, bazen tasarımın gerçekten bir pop-up çağırdığını veya gerçekten bir sekme çağırdığını biliyorum. Bunu mümkün kılmak için programcı aleminde olmalıdır. Felsefi farklılıkları bir kenara bırakırsak, bu tür bir yorum bir programlama referans sitesi için tamamen uygun değildir. Ve bu durumda, bu bir "ben mi?" soru. "Nasıl yapılır?"
jbenet

9

Aşağıdaki işlevi deneyebilirsiniz:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

Yürütülecek HTML kodu:

<a href="#" onclick="open('http://www.google.com')">google search</a>

2
Amacı nedir popup.location = URL;? window.open()Çağrı uygun URL'ye açmak gerekir ve kod örneğinde, URLdeneysel (ve yaygın destek) geri düştü düşecek böylece tanımlı değil URL nesne . Bunu tartışmalı olarak kullanırken, burada kullanılması için motivasyonların ne olduğunu merak ediyorum?
ken

Sağlam bir cevap ve yeri nasıl düzenlenebilir yapmam gerektiğini öğretti. teşekkürler
VirtualProdigy

6

Anahtar parametrelerdir:

Eğer varsa sağlamak [Yükseklik = "", Genişlik = ""] Parametreler, o zaman yeni pencerelerde açılacak.

Eğer varsa sağlamak YAPMAYIN Parametreler, o zaman yeni bir sekmede açılır.

Chrome ve Firefox'ta test edildi


1
newwin = window.open ('test.aspx', '', ''); Chrome'da test edildi: 26
MuniR

5

İlginç bir şekilde, boş bir yere girerseniz window.open öğesinin üçüncü özelliği için dize (boş bir dize veya özellikler listesi yerine) geçerseniz, Chrome, Firefox ve IE için yeni bir sekmede açılacağını gördüm. Eğer yoksa, davranış farklıydı.

İşte bu benim yeni telefonum:

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

Orijinal poster pop-up'ları yeni bir pencerede açmaya çalışmıyor mu? Ayrıca IE 11'de, verdiğiniz kod snippet'i kullanıcının tarayıcı tercihine göre yeni bir pencere veya sekme açar.

4

bu yöntemi deneyin .....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }

3

Benim için çözüm

"location=0"

3. parametrede. En son FF / Chrome ve eski bir IE11 sürümünde test edildi

Kullandığım tam yöntem çağrısı aşağıda (Değişken genişlik kullanmak istediğim gibi):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');

2

Ben sadece IE (11) ve Chrome (54.0.2794.1 kanarya SyzyASan) ile denedim:

window.open(url, "_blank", "x=y")

... ve yeni bir pencerede açıldı.

Bu, herhangi bir parametre sağlamanın yeni pencerenin açılmasına neden olacağını söylediğinde Clint pachl'ın doğru olduğu anlamına gelir .

- ve görünüşe göre bunun meşru bir parametre olması gerekmiyor!

(YMMV - Dediğim gibi, sadece iki yerde test ettim ... ve bir sonraki yükseltme sonuçları herhangi bir şekilde geçersiz kılabilir)

ETA: Yine de fark ettim - IE'de pencerenin süslemesi yok.


1

Burada cevap verdi . Ancak referans için tekrar gönderiyoruz.

window.open()gerçek tıklama etkinliğinde gerçekleşmiyorsa yeni 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, ajax çağrısını async : falseseçenek kümesi ile yaptığınızdan emin olun .


1

Ben onun değil html hedef özellikleri sorun düşünüyorum ama "yeni bir sekmede nw pencereleri açmak yerine" firefox "seçenekler" menüsü altındaki "sekme" sekmesinde seçenek işaretli değil. kontrol edip tekrar deneyin.

resim açıklamasını buraya girin


0

Aynı soruyu sordum ama nispeten basit bir çözüm buldum.

JavaScript'te window.opener !=null;pencerenin bir pop-up olup olmadığını belirlemek için kontrol ediyordum. Sitenizdeki pencerenin görüntülenip görüntülenmediğini belirlemek için benzer bir algılama kodu kullanıyorsanız, yeni pencereler JavaScript'i kullanarak "yeni" bir pencere açmak istediğinizde kolayca "kapatabilirsiniz" .

Bunu her zaman "yeni" bir pencere olmasını istediğiniz sayfanın en üstüne koyun .

<script type="text/javascript">
    window.opener=null;
</script>

Bunu sitemin giriş sayfasında kullanıyorum, böylece kullanıcılar siteme gitmek için bir açılır pencere kullanıyorlarsa pop-up davranışı almıyorlar.

Bunu yapan ve daha sonra verdiğiniz URL'ye taşınan basit bir yönlendirme sayfası bile oluşturabilirsiniz. Gibi bir şey,

Ana sayfadaki JavaScript:

window.open("MyRedirect.html?URL="+URL, "_blank");

Daha sonra buradan küçük bir javascript kullanarak URL'yi alabilir ve yönlendirebilirsiniz.

Yönlendirme Sayfasında JavaScript:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
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.