Update: Popups existieren aus sehr alten Zeiten. Die ursprüngliche Idee war, einen anderen Inhalt anzuzeigen, ohne das Hauptfenster zu schließen. Ab sofort gibt es andere Möglichkeiten, dies zu tun: JavaScript kann Serveranforderungen senden, sodass Popups selten verwendet werden. Aber manchmal sind sie immer noch praktisch.
In der Vergangenheit haben böse Websites Popups häufig missbraucht. Eine schlechte Seite könnte Tonnen von Popup-Fenstern mit Anzeigen öffnen. Daher versuchen die meisten Browser jetzt, Popups zu blockieren und den Benutzer zu schützen.
Die meisten Browser blockieren Popups, wenn sie außerhalb von vom Benutzer ausgelösten Ereignishandlern wie onclick aufgerufen werden.
Wenn Sie darüber nachdenken, ist das ein bisschen schwierig. Wenn sich der Code direkt in einem Onclick-Handler befindet, ist das einfach. Aber was öffnet das Popup in setTimeout?
Versuchen Sie diesen Code:
// open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);
Das Popup wird in Chrome geöffnet, in Firefox jedoch blockiert.
… Und das funktioniert auch in Firefox:
// open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);
Der Unterschied besteht darin, dass Firefox behandelt, dass eine Zeitüberschreitung von 2000 ms oder weniger akzeptabel ist. Danach wird jedoch das "Vertrauen" entfernt, vorausgesetzt, es befindet sich jetzt "außerhalb der Benutzeraktion". Der erste ist also blockiert und der zweite nicht.
Ursprüngliche Antwort, die aktuell 2012 war:
Diese Lösung für die Überprüfung von Popupblockern wurde in FF (v11), Safari (v6), Chrome (v23.0.127.95) und IE (v7 & v9) getestet. Aktualisieren Sie die Funktion displayError, um die Fehlermeldung nach Belieben zu behandeln.
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! :) :)