Bir tarayıcı bir popup engelleme olup olmadığını nasıl tespit edebilir?

oy
88

Bazen, ben (kullanıcı girişi, ya da bir şey önemli için) yeni bir pencere açmak pop çalışan bir web sayfasına rastlarsanız, ama pop-up engelleyici bunun olmasını engeller.

Hangi yöntemleri çağırmadan pencere düzgün başlatılan yeni bir pencere emin olmak için kullanabilir?

Oluştur 05/08/2008 saat 23:01
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
109

Eğer açılır pencere açmak için JavaScript kullanırsanız, böyle bir şey kullanabilirsiniz:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Cevap 05/08/2008 saat 23:03
kaynak kullanıcı

oy
30

Ben yukarıdaki örneklerin sayısı çalıştı, ama onları Chrome ile çalışmak için alamadım. Bu basit yaklaşım İşte JS kütüphanesinden kod snippet'idir Chrome 39, Firefox 34, Safari 5.1.7 ve IE 11. çalışmak gibi görünüyor.

openPopUp: function(urlToOpen) {
    var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400");            
    try {
        popup_window.focus();   
    } catch (e) {
        alert("Pop-up Blocker is enabled! Please add this site to your exception list.");
    }
}
Cevap 31/12/2014 saat 19:16
kaynak kullanıcı

oy
24

Açılır pencere engelleyicisi denetimi için bu çözüm FF (v11), Safari (v6), Krom (v23.0.127.95) & IE test edilmiştir (v7 & v9). Uygun gördüğünüz gibi hata mesajı işlemek için _displayError işlevini güncelleyin.

var popupBlockerChecker = {
    check: function(popup_window){
        var _scope = this;
        if (popup_window) {
            if(/chrome/.test(navigator.userAgent.toLowerCase())){
                setTimeout(function () {
                    _scope._is_popup_blocked(_scope, popup_window);
                },200);
            }else{
                popup_window.onload = function () {
                    _scope._is_popup_blocked(_scope, popup_window);
                };
            }
        } else {
            _scope._displayError();
        }
    },
    _is_popup_blocked: function(scope, popup_window){
        if ((popup_window.innerHeight > 0)==false){ 
            scope._displayError();
        }
    },
    _displayError: function(){
       alert("Popup Blocker is enabled! Please add this site to your exception list.");
    }
};

Kullanımı:

var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);

Bu yardımcı olur umarım! :)

Cevap 30/11/2012 saat 21:39
kaynak kullanıcı

oy
10

Olacak bir "çözüm" hep tarayıcı şirket veya versiyonunun bakılmaksızın işe sadece ekranda bir uyarı mesajı koymaktır, bir pop-up yaratacak kontrole yakın bir yerde, yani kibarca aksiyon Bir açılan gerektirir kullanıcıyı uyarır yukarı ve site için sağlayacak memnun etmek.

Ben fantezi ya da bir şey olmadığını biliyorum, ancak herhangi bir basit alamayan ve sadece o zaman diğer kabuslar geçebiliriz, yaklaşık 5 dakika test gerektirir.

Kullanıcı, site için pop-up izin verdi kez pop-up aşırıya yoksa, o da onurlu olur. Yapmak istediğiniz son şey ziyaretçileri rahatsız olduğunu.

Cevap 26/02/2016 saat 22:49
kaynak kullanıcı

oy
0

Olayı şöyle onbeforeunload kullanarak kontrol edebilmemiz

    function popup()
    {
        var chk=false;
        var win1=window.open();
        win1.onbeforeunload=()=>{
            var win2=window.open();
            win2.onbeforeunload=()=>{
                chk=true;
            };
        win2.close();
        };
        win1.close();
        return chk;
    }

arka planda 2 siyah pencere açılacaktır

işlev Boole değer geri gönderir.

Cevap 29/05/2018 saat 14:56
kaynak kullanıcı

oy
0

Ben çözümlerin çok denedim, ama sadece bir ben de uBlock Menşe ile çalıştı ile gelebilir, pop-up kapalı durumunu kontrol etmek için bir zaman aşımı kullanarak idi.

function popup (url, width, height) {
    const left = (window.screen.width / 2) - (width / 2)
    const top = (window.screen.height / 2) - (height / 2)
    let opener = window.open(url, '', `menubar=no, toolbar=no, status=no, resizable=yes, scrollbars=yes, width=${width},height=${height},top=${top},left=${left}`)

    window.setTimeout(() => {
        if (!opener || opener.closed || typeof opener.closed === 'undefined') {
            console.log('Not allowed...') // Do something here.
        }
    }, 1000)
}

Açıkçası bu kesmek; Bu sorunun tüm çözümleri gibi.

Sen ilk açma ve kapama için hesaba katacak setTimeout yeterli zaman sağlamak için gereken, yüzden asla iyice doğru olacak. Bu deneme yanılma bir pozisyon olacaktır.

denemelerinin listenize bu ekleyin.

Cevap 30/01/2018 saat 12:29
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more