Krom engellenen pop-up tespit | Netgez.com
SORU
20 Mart 2009, Cuma


Krom engellenen pop-up tespit

Bir pop-up diğer tarayıcılar the answer to this question açıklandığı gibi) bloke olup olmadığını tespit etmek için javascript teknikleri farkındayım. Burada temel test:

var newWin = window.open(url);

if(!newWin || newWin.closed || typeof newWin.closed=='undefined')
{
    //POPUP BLOCKED
}

Ama bu Chrome çalışmıyor. "Bölüm her zaman pop-up engellendiğinde ulaştı. POPUP BLOKE

Tabii ki, test Chrome aslında açılan engellemez beri bir ölçüde çalışıyor, ama listeler "" pop-up. tıkalı olan sağ alt köşesinde küçük bir simge durumuna küçültülmüş bir pencerede açar

Yapmak istediğim şey ise açılan Chrome pop-up engelleyici tarafından bloke olup olmadığını söylemek mümkün olacak. Tarayıcı özelliği algılama lehine koklama uzak durmaya çalışırım. Bir şekilde tarayıcı koklama olmadan bunu yapmak için var mı?

EditŞimdi newWin.outerHeight, newWin.left ve diğer benzer özelliklerini kullanmak bunu gerçekleştirmek için yapmaya çalıştım. Google Chrome pop-up engellendiğinde 0 olarak pozisyon ve yükseklik değerlerini verir.

Ne yazık ki, ayrıca eğer popup aslında zaman belirsiz bir miktar için açılsa bile aynı değerleri döndürür. Sihirli bir süre sonra (benim test birkaç saniye), konum ve boyut bilgileri doğru değerler olarak verir. Diğer bir deyişle, hala bu sergiyi hiçbir şey çıkartamadım. Herhangi bir yardım mutluluk duyacağız.

CEVAP
7 Temmuz 2009, Salı


Peki bu "sihirli zaman bahsettiğin" pop-up DOM yüklendiğinde muhtemelen. Yoksa olabilir her şey (resimler, CSS dıştan takma, vb.) yüklendi. Bu kolayca açılan çok büyük bir grafik (önbelleği Temizle önce!) ekleyerek test edebilirsiniz. Eğer kullanarak bir Javascript Çerçeve gibi bir WordPress kullanmak (veya benzeri), geçer hazır() olay (veya benzer bir şey) beklemek için DOM yük önce kontrol penceresi ofset. Tehlike bu Safari algılama çalışmalarında çelişkili bir şekilde: açılan DOM asla hazır() Safari çünkü verecek bir geçerli işlemek için pencere yapmaya çalıştığını açık olsun aslında açar ya da değil. (aslında, pop-up test kodunuzu yukarıdaki safari için işe yaramaz sanırım.)

YapabileceÄŸiniz en iyi ÅŸey bir setTimeout senin test wrap olduÄŸunu düşünüyorum() ve pop-up testi çalıştırmadan önce yükleme tamamlamak için 3-5 saniye ver. Mükemmel deÄŸil, ama zamanın •'inde en az çalışması gerekir.

İşte çapraz tarayıcı tespiti için kullandığım kod, Krom kısmı olmadan.

function _hasPopupBlocker(poppedWindow) {
    var result = false;

    try {
        if (typeof poppedWindow == 'undefined') {
            // Safari with popup blocker... leaves the popup window handle undefined
            result = true;
        }
        else if (poppedWindow && poppedWindow.closed) {
            // This happens if the user opens and closes the client window...
            // Confusing because the handle is still available, but it's in a "closed" state.
            // We're not saying that the window is not being blocked, we're just saying
            // that the window has been closed before the test could be run.
            result = false;
        }
        else if (poppedWindow && poppedWindow.test) {
            // This is the actual test. The client window should be fine.
            result = false;
        }
        else {
            // Else we'll assume the window is not OK
            result = true;
        }

    } catch (err) {
        //if (console) {
        //    console.warn("Could not access popup window", err);
        //}
    }

    return result;
}

Ben ne veli bu test ve sarın bir setTimeout(), yük. çocuğun penceresi 3-5 saniye veriyorum Alt pencere, bir sınama işlevi eklemeniz gerekir:

fonksiyon testi() {}

Pop-up engelleyici Dedektör "" işlev alt pencere üyesi olarak bulunmaktadır. test olup olmadığını görmek için testler

15 HAZÄ°RAN 2015 EKLEDÄ°:

Bu işlemek için modern şekilde pencere kullanmak olacaktır sanırım.() postMessage pencere yüklenmiş alt üst ediniz. Bu yaklaşım benzer (çocuk dolu ana söyler) ama iletişim araçları gelişti. Alt etki alanları arası bunu başardı:

$(window).load(function() {
  this.opener.postMessage({'loaded': true}, "*");
  this.close();
});

Üst bu mesaj için kullanarak dinler:

$(window).on('message', function(event) {     
  alert(event.originalEvent.data.loaded)
}); 

Bu yardımcı olur umarım.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Felice Musique

    Felice Musiq

    22 NÄ°SAN 2014
  • LimeFire

    LimeFire

    2 ÅžUBAT 2012