W jaki sposób można wykryć, czy przeglądarka jest blokowanie popup?

głosy
88

Od czasu do czasu, na jaki natknąłem się na stronie internetowej, która dociera do pop otwarte nowe okno (dla danych wprowadzonych przez użytkownika, albo coś ważne), ale pop-upów zapobiega takiej sytuacji.

Jakie metody można użyć okna wzywając, aby upewnić się nowe okno uruchomiony prawidłowo?

Utwórz 05/08/2008 o 23:01
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
109

Jeśli używasz JavaScript, aby otworzyć okienko, można użyć coś takiego:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Odpowiedział 05/08/2008 o 23:03
źródło użytkownik

głosy
30

Próbowałem wielu przykładach powyżej, ale nie mogłem ich do pracy z Chrome. To proste podejście wydaje się działać z Chrome 39, Firefox 34, Safari 5.1.7 oraz IE 11. Oto fragment kodu z naszej biblioteki JS.

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.");
    }
}
Odpowiedział 31/12/2014 o 19:16
źródło użytkownik

głosy
24

To rozwiązanie dla kontroli wyskakujących okienek zostało przetestowane w FF (v11), Safari (v6), Chrome (v23.0.127.95) i IE (v7 i v9). Aktualizować funkcję _displayError obsłużyć komunikat o błędzie, jak widać pasuje.

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.");
    }
};

Stosowanie:

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

Mam nadzieję że to pomoże! :)

Odpowiedział 30/11/2012 o 21:39
źródło użytkownik

głosy
10

Jeden „rozwiązanie”, które zawsze działają niezależnie od firmy przeglądarki lub wersji jest po prostu umieścić komunikat ostrzegawczy na ekranie, gdzieś blisko do kontroli, które będą tworzyć pop-up, który grzecznie ostrzega użytkownika, że działanie wymaga podręczne i proszę włączyć je do serwisu.

Wiem, że to nie jest wyszukany lub cokolwiek, ale nie można było prostsze i wymaga tylko około 5 minut badania, a następnie można przejść do innych koszmarów.

Gdy użytkownik zezwolił na wyskakujące okienka na swojej stronie, to byłoby również taktowny jeśli nie przesadzić pop-upy. Ostatnią rzeczą, którą chcesz zrobić, to drażnić użytkowników.

Odpowiedział 26/02/2016 o 22:49
źródło użytkownik

głosy
0

Dzięki zastosowaniu onbeforeunload imprezę możemy sprawdzić w następujący sposób

    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;
    }

otworzy 2 czarne okna w tle

funkcja zwraca wartość logiczną.

Odpowiedział 29/05/2018 o 14:56
źródło użytkownik

głosy
0

Próbowałem wiele rozwiązań, ale tylko jeden mogę wymyślić, że pracował również z uBlock pochodzenia, był przez wykorzystanie limitu czasu, aby sprawdzić stan zamknięty popup.

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)
}

Oczywiście jest to hack; jak wszystkie rozwiązania tego problemu.

Trzeba zapewnić wystarczająco dużo czasu w swoim setTimeout do uwzględnienia początkowego otwierania i zamykania, więc nigdy nie będzie dokładnie dokładne. Będzie to stanowisko prób i błędów.

Dodaj to do swojej listy prób.

Odpowiedział 30/01/2018 o 12:29
źródło użytkownik

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