Frage

Gelegentlich habe ich über eine Webseite, die versucht, Sie zu pop öffnen Sie ein neues Fenster (für Benutzereingaben, oder etwas wichtiges), aber der popup-blocker verhindert, dass dies geschieht.

Welche Methoden kann das aufrufende Fenster verwenden, um sicherzustellen, dass die neuen Fenster gestartet, richtig?

War es hilfreich?

Lösung

Wenn Sie JavaScript verwenden, öffnen Sie die pop-up-Fenster, die Sie verwenden können, so etwas wie dieses:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}

Andere Tipps

Ich habe versucht, eine Reihe der oben genannten Beispiele, aber ich konnte nicht bekommen, um die Arbeit mit Chrome.Dieser einfache Ansatz scheint zu funktionieren mit Chrome 39, Firefox 34, Safari 5.1.7, und IE 11.Hier ist das code-snippet aus unserem JS-Bibliothek.

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

Update:Popups bestehen aus wirklich alten Zeiten.Die ursprüngliche Idee war, zu zeigen, ein anderer Inhalt, ohne das Hauptfenster geschlossen wird.Ab jetzt, gibt es andere Möglichkeiten, dies zu tun:JavaScript ist in der Lage, zum senden von Anforderungen für server, also, popups werden nur selten verwendet.Aber manchmal sind Sie immer noch nützlich.

In der Vergangenheit böse sites missbraucht popups viel.Eine schlechte Seite öffnen könnte, Tonnen von pop-up-Fenstern mit Werbung.So, jetzt die meisten Browser versuchen, zu blockieren pop-UPS und Sicherheit für die Benutzer.

Die meisten Browser blockiert popups, wenn Sie aufgerufen werden, die außerhalb des user-triggered-event-Handler wie onclick.

Wenn Sie darüber nachdenken, ist das ein bisschen schwierig.Wenn der code direkt in einen onclick-handler, dann ist das einfach.Aber was ist das popup öffnet sich, in setTimeout?

Versuchen Sie diesen code:

 // open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);

Das popup öffnet sich in Chrome, aber bekommt in Firefox.

...Und dies funktioniert in Firefox zu:

 // open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);

Der Unterschied ist, dass Firefox behandelt ein timeout von 2000ms oder weniger akzeptabel sind, aber, nachdem es entfernt die "Vertrauen", vorausgesetzt, dass es jetzt "außerhalb der der Benutzer die Aktion".So die erste wird blockiert, und die zweite ist nicht.


Ursprüngliche Antwort, die aktuell war 2012:

Diese Lösung für den popup-blocker Kontrolle wurde getestet in FF (v11), Safari (v6), Chrom (v23.0.127.95) & IE (v7 & v9).Aktualisieren displayError Funktion behandeln Sie die Fehlermeldung 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!:)

Eine "Lösung", die immer arbeiten unabhängig von browser-oder Unternehmens-version ist einfach eine Warnmeldung auf dem Bildschirm, irgendwo in der Nähe die Kontrolle, das erstellen von pop-UPS, die sich höflich warnt den Benutzer, dass die Aktion erfordert eine pop-up-und bitte aktivieren Sie für die Website ein.

Ich weiß, es ist nicht fancy oder irgendetwas, aber es kann nicht einfacher sein und erfordert nur etwa 5 Minuten testen, dann können Sie gehen auf andere Alpträume.

Sobald der Nutzer erlaubt pop-ups für Ihre Website, wäre es auch rücksichtsvoll sein, wenn Sie nicht übertreiben, die pop-ups.Das Letzte, was Sie tun wollen, ist, ärgern Sie Ihre Besucher.

Ich habe versucht, viele Lösungen, aber die einzige, die ich tun konnte, das hat auch mit uBlock Origin, wurde durch die Nutzung einer Zeitüberschreitung überprüfen Sie den geschlossenen Zustand des 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)
}

Dies ist offensichtlich ein hack;wie alle Lösungen zu diesem problem.

Sie müssen genügend Zeit in Ihrer setTimeout Rechnung für die erste öffnung und Schließung, so ist es nie genau richtig.Es wird eine position von Versuch und Irrtum.

Fügen Sie diese zu Ihrer Liste der versuche.

Durch die Verwendung von onbeforeunload-Ereignis, das wir können ü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 öffnen sich 2 schwarze Fenster im hintergrund

die Funktion gibt den booleschen Wert.

Ich kombinierte @Kevin B und @DanielB Lösungen.
Das ist viel einfacher.

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

Verwendung:

var popup = window.open('https://www.google.com', '_blank');
if (isPopupBlockerActivated(popup)) {
    // Do what you want.
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top