2008-08-05 19 views

Antwort

105

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 
} 
+1

Es funktioniert nicht mit Chrome ;-(besser verwenden Sie die Kevin B Lösung unten .. – sly63

+0

Hier ist eine Antwort für Chrome: [erkennen-blocked-popup-in-chrome] (http://stackoverflow.com/questions/668286/detect-blocked-popup-in-chrome/1089792 # 1089792) – ajwaka

+0

lies das auch: https://Stackoverflow.com/a/20235765/2892117 –

23

Diese Lösung für Popup-Blocker Kontrolle hat in FF (v11), Safari (v6), Chrom (v23 getestet .0.127.95) & IE (v7 & v9). Aktualisieren Sie die Funktion _displayError, um die Fehlermeldung so zu behandeln, wie Sie es für richtig halten.

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

Verbrauch:

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

hoffe, das hilft! :)

+1

nicht funktioniert form mir Chrome (v26.0.1410.64) –

+5

I Ich glaube, Sie brauchen mehr Unterstriche –

27

habe ich versucht, eine Reihe der oben genannten Beispiele, aber ich konnte sie nicht bekommen mit Chrome zu arbeiten. Dieser einfache Ansatz scheint mit Chrome 39, Firefox 34, Safari 5.1.7 und IE 11 zu funktionieren. Hier ist der Codeschnipsel aus unserer 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."); 
    } 
} 
+1

Es funktioniert nicht für mich in IE – Surendra

+0

@Surendra bitte, können Sie angeben, was Sie mit "nicht funktioniert"? Ein Fehler bei der Analyse Zeit? Ein Fehler zur Laufzeit? Das Popup öffnet sich, aber es ist als blockiert markiert ? Das Popup ist gesperrt, aber es ist als offen markiert?Ich sehe keinen Grund, warum der Explorer dies versäumt, es sei denn, es ist erlaubt, focus() auf NULL zu setzen. In diesem Fall würde ein Test auf NULL vor dem Versuch einfach funktionieren. – FrancescoMM

10

One „Lösung“ Das wird immer Arbeit unabhängig vom verwendeten Browser Unternehmen oder Version einfach ist, um eine Warnmeldung auf dem Bildschirm zu setzen, irgendwo in der Nähe der Steuerung, die ein Pop-up zu schaffen, das höflich warnt Der Benutzer, für den die Aktion erforderlich ist, muss ein Popup-Fenster öffnen und diese für die Site 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 du tun willst, ist deine Besucher zu ärgern.

+1

Danke, aber nein danke. – FrancescoMM

+0

Nun, @FrancescoMM, Sie sind sehr willkommen! – UncaAlby

+0

Leider sind manchmal alle anderen Lösungen in dieser Frage nicht akzeptabel - nur dieses. Warum? Weil sie alle versuchen, ein Popup anzuzeigen - nicht nur erkennen, ob Popups aktiviert sind. Was, wenn ich es still machen möchte? –

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 angeben, um das erstmalige Öffnen und Schließen zu berücksichtigen. Es wird also nie ganz genau sein. Es wird eine Position von Versuch und Irrtum sein.

Fügen Sie diese auf Ihrer Liste der Versuche.

Verwandte Themen