Pembaruan: Popup ada dari zaman yang sangat kuno. Gagasan awal adalah menampilkan konten lain tanpa menutup jendela utama. Sampai sekarang, ada cara lain untuk melakukan itu: JavaScript dapat mengirim permintaan ke server, sehingga popup jarang digunakan. Namun terkadang mereka masih berguna.
Di masa lalu situs jahat popups banyak disalahgunakan. Halaman yang buruk bisa membuka banyak jendela sembul dengan iklan. Jadi sekarang sebagian besar peramban mencoba memblokir popup dan melindungi pengguna.
Sebagian besar browser memblokir popup jika mereka dipanggil di luar event handler yang dipicu pengguna seperti onclick.
Jika Anda memikirkannya, itu agak sulit. Jika kodenya secara langsung ada di handler onclick, maka itu mudah. Tetapi popup apa yang terbuka di setTimeout?
Coba kode ini:
// open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);
Munculan terbuka di Chrome, tetapi diblokir di Firefox.
... Dan ini juga berfungsi di Firefox:
// open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);
Perbedaannya adalah bahwa Firefox memperlakukan batas waktu 2000 ms atau kurang dapat diterima, tetapi setelah itu - menghapus "kepercayaan", dengan asumsi bahwa sekarang ini "di luar tindakan pengguna". Jadi yang pertama diblokir, dan yang kedua tidak.
Jawaban asli yang terkini 2012:
Solusi ini untuk memeriksa pemblokir popup telah diuji dalam FF (v11), Safari (v6), Chrome (v23.0.127.95) & IE (v7 & v9). Perbarui fungsi displayError untuk menangani pesan kesalahan yang Anda inginkan.
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.");
}
};
Pemakaian:
var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);
Semoga ini membantu! :)