2008-10-30 6 views
6

Gibt es eine gute Möglichkeit festzustellen, ob eine Person einen Popup-Blocker aktiviert hat? Ich muss eine Web-Anwendung pflegen, die leider Tonnen von Popups hat und ich muss überprüfen, ob der Benutzer Popup-Blocker aktiviert hat.Popup-Erkennung, bevor sich der Benutzer anmeldet

Der einzige Weg, den ich gefunden habe, ist ein Fenster von Javascript zu öffnen, zu überprüfen, ob es offen ist, um festzustellen, ob ein Blocker aktiviert ist und dann sofort zu schließen.

Dies ist ein wenig nervig, da Benutzer, die es nicht aktiviert haben, einen kleinen Blitz auf dem Bildschirm sehen, wenn sich das Fenster öffnet und schließt.

Gibt es andere nicht aufdringliche Methoden, um dies zu erreichen?

Antwort

6

lesen Detect a popup blocker using Javascript:

Grundsätzlich prüfen Sie, ob die ‚window.open‘ Methode mit einem Griff zu einem neu geöffneten Fenster zurück.

sieht wie folgt aus:

var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no'); 
if(mine) 
    var popUpsBlocked = false 
else 
    var popUpsBlocked = true 
mine.close() 
+1

Dies ist sehr ähnlich zu dem, was ich schon habe. Ich war auf der Suche nach einer unaufdringlicheren Methode, obwohl ich denke, dass das nicht möglich ist. –

1

Ich denke nicht, dass es eine Möglichkeit gibt, dies zu erkennen, ohne zu versuchen, ein Fenster zu öffnen, da Popup-Blocker nichts hinzufügen, was in JS abgefragt werden kann.

2

Wie andere haben gesagt, die einzige Möglichkeit, um herauszufinden, sicher ist, es zu versuchen.

Allerdings ist eine gute ungefähre Antwort auf die Frage "ist ein Popup-Blocker installiert" in diesen Tagen "ja". Alle neueren Browser blockieren standardmäßig Ihre Pop-ups. Daher sollten Sie Ihre App so gestalten, dass sie sich damit elegant auskennt. Nämlich, versuchen Sie nicht, window.open außer als Reaktion auf eine Benutzerinteraktion (in der Regel onclick), und alles wird gut.

0

Popups, die als Reaktion auf eine Aktion eines Benutzers — geöffnet werden, z. B. das Klicken auf einen Link —, sollten nicht durch Popup-Blocker blockiert werden.

+0

Ich kann verstehen, warum der Autor dies tun möchte. In unserer Anwendung haben sie zu dem Zeitpunkt, zu dem der Benutzer eine Aktion initiiert hat, die ein separates Fenster benötigt, ziemlich viele Daten eingegeben. Wenn der Popup-Blocker aktiv ist und der Benutzer das neue Fenster zulässt, aktualisiert der Browser normalerweise das Fenster, in dem sich auch die ursprüngliche App befindet. Das bedeutet, dass ihre Daten beim erneuten Laden unserer Flex/Flash-App verloren gehen. –

3

Wie andere schon gesagt haben, müssen Sie es ausprobieren und sehen, aber die Suche nach dem resultierenden Fensterobjekt, das nicht "falsy" ist, ist nicht für alle Browser ausreichend.

Opera gibt noch ein Window Objekt, wenn ein Popup blockiert wird, so müssen Sie ausreichend um das Objekt zu untersuchen, um festzustellen, ob es ein echtes Fenster ist:

var popup = window.open(/* ... */); 
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");