Wie kann ich erkennen, ob ein Browser ein Popup blockiert?

stimmen
88

Gelegentlich habe ich über eine Webseite kommen, dass ein neues Fenster (für die Benutzereingabe oder etwas Wichtiges) Pop öffnen versucht, aber der Popup-Blocker verhindert, dass dies geschieht.

Welche Methoden können die anrufende Fenster das neue Fenster richtig ins Leben gerufen, um verwenden sicher?

Veröffentlicht am 05/08/2008 um 23:01
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
109

Wenn Sie JavaScript verwenden, um das Popup zu öffnen, können Sie so etwas wie folgt verwenden:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Beantwortet am 05/08/2008 um 23:03
quelle vom benutzer

stimmen
30

Ich habe versucht, eine Reihe der oben genannten Beispiele, aber ich konnte nicht bekommen sie mit Chrome zu arbeiten. Dieser einfache Ansatz scheint mit Chrome 39, Firefox 34, Safari 5.1.7 und IE 11. Hier ist der Code-Schnipsel aus unserer JS-Bibliothek zu arbeiten.

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.");
    }
}
Beantwortet am 31/12/2014 um 19:16
quelle vom benutzer

stimmen
24

Diese Lösung zur Überprüfung Popup-Blocker hat in FF (v11), Safari (v6), Chrome (v23.0.127.95) & IE (v7 & v9) getestet. Aktualisieren Sie die _displayError Funktion die Fehlermeldung zu handhaben, wie Sie sehen, passen.

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

Verwendung:

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

Hoffe das hilft! :)

Beantwortet am 30/11/2012 um 21:39
quelle vom benutzer

stimmen
10

Eine „Lösung“ , die wird immer unabhängig vom verwendeten Browser Unternehmen oder Version arbeitet , ist einfach eine Warnmeldung auf dem Bildschirm zu setzen, irgendwo in der Nähe der Steuerung , die ein Pop-up zu schaffen, warnt davor , dass höflich den Benutzer , dass die Aktion ein Pop- erfordert und bitte sie für die Website zu aktivieren.

Ich weiß, dass es nichts Besonderes ist oder etwas, aber es kann nicht einfacher bekommen und benötigt nur ca. 5 Minuten Prüfung, dann können Sie auf andere Alpträume bewegen.

Sobald der Benutzer Pop-ups für Ihre Website erlaubt hat, wäre es auch rücksichtsvoll sein, wenn Sie die Pop-ups nicht übertreiben. Das letzte, was Sie tun möchten, ist Ihre Besucher ärgern.

Beantwortet am 26/02/2016 um 22:49
quelle vom benutzer

stimmen
0

Durch die Verwendung von onbeforeunload Ereignisse können wir überprüfen, wie folgt

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

es wird 2 schwarz-Fenster im Hintergrund öffnen

gibt die Funktion boolean Wert.

Beantwortet am 29/05/2018 um 14:56
quelle vom benutzer

stimmen
0

Ich habe viele Lösungen ausprobiert, aber die einzige, die ich mit, dass auch mit ublock Herkunft gearbeitet kommen konnte, war durch einen Timeout Verwendung des geschlossenen Zustand des Popup zu überprüfen.

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

Offensichtlich ist dies ein Hack; wie alle Lösungen für dieses Problem.

Sie müssen genügend Zeit in Ihrem SetTimeout schaffen für die anfängliche Öffnen und Schließen zu berücksichtigen, so dass es nie gründlich genau sein wird. Es wird eine Position von Versuch und Irrtum sein.

Fügen Sie diese auf Ihrer Liste der Versuche.

Beantwortet am 30/01/2018 um 12:29
quelle vom benutzer

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