Hogyan érzékeli, ha a böngésző blokkolja a felugró?

szavazat
88

Alkalmanként jöttem át egy weboldalt, amely megpróbálja kinyílik egy új ablak (felhasználói bemenetet, vagy valami fontos), de a pop-up blokkoló ezt megakadályozza.

Milyen módszerekkel lehet a hívó ablakot használja, hogy megbizonyosodjon arról az új ablakhoz indult rendesen?

A kérdést 05/08/2008 23:01
a forrás felhasználó
Más nyelveken...                            


7 válasz

szavazat
109

Ha JavaScript hogy nyissa ki a felugró, akkor valami ilyesmit:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Válaszolt 05/08/2008 23:03
a forrás felhasználó

szavazat
30

Próbáltam több a fenti példák, de nem tudtam, hogy működik a Chrome. Ez az egyszerű megközelítés úgy tűnik, működik a Chrome 39, Firefox 34, a Safari 5.1.7, és az IE 11. Itt látható a kódrészletet a mi JS könyvtárból.

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.");
    }
}
Válaszolt 31/12/2014 19:16
a forrás felhasználó

szavazat
24

Ez a megoldás a pop-up blokkoló ellenőrzése tesztelték FF (V11), Safari (v6), Chrome (v23.0.127.95) és IE (v7 és v9). Frissítse a _displayError funkciót kezelni a hibaüzenet, ahogy jónak látja.

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

Használat:

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

Remélem ez segít! :)

Válaszolt 30/11/2012 21:39
a forrás felhasználó

szavazat
10

Egy „megoldás”, hogy mindig működik, függetlenül a böngésző társaság vagy a változat egyszerűen csak egy figyelmeztető üzenet jelenik meg a képernyőn, valahol közel a kontroll, hogy létrehoz egy pop-up, hogy udvariasan figyelmezteti a felhasználót, hogy a kereset igényel pop- fel és kérjük, lehetővé teszi számukra az oldalon.

Tudom, hogy ez nem divatos, vagy ilyesmi, de nem tud olyan egyszerűbb és mindössze 5 perc tesztelés, akkor lépni más rémálmok.

Miután a felhasználó engedélyezett pop-up a honlapjára, akkor is legyen figyelmes, ha nem túlzásba a pop-up. Az utolsó dolog, amit akarok idegesíteni a látogatók.

Válaszolt 26/02/2016 22:49
a forrás felhasználó

szavazat
0

I kombinált @Kevin B és @ DanielB megoldásai.
Ez sokkal egyszerűbb.

var isPopupBlockerActivated = function(popupWindow) {
    if (popupWindow) {
        if (/chrome/.test(navigator.userAgent.toLowerCase())) {
            try {
                popupWindow.focus();
            } catch (e) {
                return true;
            }
        } else {
            popupWindow.onload = function() {
                return (popupWindow.innerHeight > 0) === false;
            };
        }
    } else {
        return true;
    }
    return false;
};

Használat:

var popup = window.open('https://www.google.com', '_blank');
if (isPopupBlockerActivated(popup)) {
    // Do what you want.
}
Válaszolt 27/02/2019 05:53
a forrás felhasználó

szavazat
0

Segítségével onbeforeunload esetén tudjuk ellenőrizni az alábbiak szerint

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

akkor nyissa 2 fekete ablakok a háttérben

A függvény a logikai érték.

Válaszolt 29/05/2018 14:56
a forrás felhasználó

szavazat
0

Próbáltam sok megoldás, de az egyetlen, ami felér azzal is dolgozott uBlock Eredeti, volt felhasználásával a timeout, hogy ellenőrizze a zárt állapotát a 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)
}

Nyilvánvaló, hogy ez egy hack; mint minden megoldás erre a problémára.

Be kell, hogy elegendő időt a setTimeout elszámolni a kezdeti nyitó és záró, így soha nem lesz teljesen pontos. Ez lesz a helyzete próbálgatással.

Add, hogy ez a lista a kísérleteket.

Válaszolt 30/01/2018 12:29
a forrás felhasználó

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