Vă mulțumim pentru susținere

Cum pot detecta dacă un browser blochează un pop-up?

Ocazional, am întâlnit o pagină Web care încearcă să deschidă o fereastră nouă (pentru introducerea de către utilizator sau ceva important), dar blocarea ferestrelor de tip pop-up împiedică acest lucru să se întâmple.

Ce metode poate utiliza fereastra de apelare pentru a vă asigura că noua fereastră a fost lansată corect?

0
adăugat editat

5 răspunsuri

Dacă utilizați JavaScript pentru a deschide ferestrele pop-up, puteți folosi ceva similar:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
0
adăugat
Nu funcționează cu Chrome ;-( utilizați mai bine soluția Kevin B de mai jos ..
adăugat autor sly63
Iată un răspuns pentru Chrome: Detect-blocat-pop-in-crom
adăugat autor ajwaka
citiți și acest lucru: stackoverflow.com/a/20235765/2892117
adăugat autor Shekhar Joshi

Am incercat o multime de solutii, dar singurul care a putut sa vina cu asta, de asemenea, a lucrat cu uBlock Origin, a fost prin folosirea unui timeout pentru a verifica starea inchisa a pop-up-ului.

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

Evident, acesta este un hack; ca toate soluțiile la această problemă.

Trebuie să furnizați suficient timp în setTimeout pentru a vă da seama de deschiderea și închiderea inițială, astfel încât nu va fi niciodată corectă. Va fi o poziție de încercare și de eroare.

Adăugați acest lucru în lista de încercări.

0
adăugat

This solution for popup blocker checking has been tested in FF (v11), Safari (v6), Chrome (v23.0.127.95) & IE (v7 & v9). Update the _displayError function to handle the error message as you see fit.

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

utilizare:

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

Sper că acest lucru vă ajută! :)

0
adăugat
nu mi-a lucrat Chrome (v26.0.1410.64)
adăugat autor Surendra Jnawali
Cred că aveți nevoie de mai multe subliniere
adăugat autor Jacob Stamm

Am încercat o serie de exemple de mai sus, dar nu le-am putut face să lucreze cu Chrome. Această abordare simplă pare să funcționeze cu Chrome 39, Firefox 34, Safari 5.1.7 și IE 11. Aici este fragmentul de cod din biblioteca noastră 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.");
    }
}
0
adăugat
@Surendra vă rog, puteți specifica ce vrei să spui cu "nu funcționează"? O eroare la timpul de analiză? O eroare la rulare? Se deschide fereastra pop-up, dar este marcată ca blocată? Popup este blocat, dar este marcat ca deschis? Nu văd niciun motiv pentru care exploratorul ar eșua acest lucru, dacă nu este permisă apelarea focus () pe NULL, caz în care un test pentru NULL înainte de încercare ar funcționa.
adăugat autor FrancescoMM
Nu funcționează pentru mine în IE
adăugat autor Surendra

O "soluție" care va funcționa întotdeauna , indiferent de compania sau versiunea browserului, este de a pune un mesaj de avertizare pe ecran, undeva în apropierea controlului care va crea un pop-up, care avertizează politicos utilizatorul că acțiunea necesită un pop-up și vă rugăm să le permiteți site-ului.

Știu că nu eo fantezie sau altceva, dar nu poate fi mai simplu și necesită doar 5 minute de testare, apoi poți trece la alte coșmaruri.

Odată ce utilizatorul a permis ferestrele pop-up pentru site-ul dvs., ar fi, de asemenea, considerat dacă nu exagerați cu ferestrele pop-up. Ultimul lucru pe care doriți să-l faceți este să vă supărați pe vizitatori.

0
adăugat
Mulțumesc, dar nu mulțumesc.
adăugat autor FrancescoMM
Ei bine, @FrancescoMM, esti foarte binevenit!
adăugat autor UncaAlby
Din păcate, uneori toate celelalte soluții din această întrebare nu sunt acceptabile - doar pe aceasta. De ce? Deoarece toți încearcă să afișeze un pop-up - nu doar să detecteze dacă sunt activate pop-up-uri. Și dacă vreau să o fac în tăcere?
adăugat autor Sagi Mann