Hvordan kan jeg oppdage om en nettleser blokkerer et popup?

stemmer
95

Noen ganger har jeg kommet over en nettside som prøver å pop åpne et nytt vindu (for brukerundersøkelser, eller noe viktig), men popup-blokkering forhindrer at dette skjer.

Hvilke metoder kan kalle vinduet bruker til å sørge for at det nye vinduet lansert på riktig måte?

Publisert på 05/08/2008 klokken 22:01
kilden bruker
På andre språk...                            


6 svar

stemmer
118

Hvis du bruker Javascript for å åpne popup, kan du bruke noe sånt som dette:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Svarte 05/08/2008 kl. 22:03
kilden bruker

stemmer
33

Jeg prøvde en rekke av eksemplene ovenfor, men jeg kunne ikke få dem til å jobbe med Chrome. Denne enkle tilnærmingen synes å fungere med Chrome 39, Firefox 34, Safari 5.1.7, og IE 11. Her er kodebit fra vår JS biblioteket.

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.");
    }
}
Svarte 31/12/2014 kl. 19:16
kilden bruker

stemmer
24

Denne oppløsningen for blokkeringskontroll har blitt testet i FF (v11), Safari (v6), krom (v23.0.127.95) og IE (v7 og v9). Oppdater _displayError funksjon for å håndtere feilmeldingen som du ser passer.

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

bruk:

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

Håper dette hjelper! :)

Svarte 30/11/2012 kl. 20:39
kilden bruker

stemmer
10

En "løsning" som vil alltid jobbe uavhengig av nettleserselskapet eller versjon er å bare sette en advarsel på skjermen, et sted nær kontrollen som vil skape en pop-up, som høflig advarer brukeren om at handlingen krever en pop- opp og å behage gjøre dem i stand for området.

Jeg vet det er ikke fancy eller noe, men det kan ikke bli enklere og krever bare ca 5 minutter testing, så kan du gå videre til andre mareritt.

Når brukeren har lov til pop-ups på nettstedet ditt, vil det også være hensyns hvis du ikke overdrive pop-ups. Det siste du ønsker å gjøre er å irritere dine besøkende.

Svarte 26/02/2016 kl. 22:49
kilden bruker

stemmer
0

Ved å bruke onbeforeunload hendelse kan vi sjekke som følger

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

det vil åpne 2 svarte vinduer i bakgrunnen

funksjonen returnerer boolsk verdi.

Svarte 29/05/2018 kl. 14:56
kilden bruker

stemmer
0

Jeg har prøvd mange løsninger, men den eneste jeg kunne komme opp med som også jobbet med uBlock Origin, var ved å benytte en timeout for å sjekke status på de 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)
}

Selvfølgelig er dette en hack; som alle løsninger på dette problemet.

Du må gi nok tid i setTimeout å gjøre rede for den første åpning og lukking, så det er aldri kommer til å bli grundig nøyaktig. Det vil være en posisjon av prøving og feiling.

Legg til i listen over forsøk.

Svarte 30/01/2018 kl. 12:29
kilden bruker

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