Güncelleme: Popup'lar gerçekten çok eski zamanlardan beri var. İlk fikir, ana pencereyi kapatmadan başka bir içerik göstermekti. Şu an itibariyle, bunu yapmanın başka yolları da var: JavaScript, sunucu için istek gönderebildiğinden, pop-up'lar nadiren kullanılır. Ama bazen hala kullanışlıdırlar.
Geçmişte kötü siteler, pop-up'ları çok kötüye kullandı. Kötü bir sayfa, reklamlarla birlikte tonlarca açılır pencere açabilir. Artık çoğu tarayıcı pop-up'ları engellemeye ve kullanıcıyı korumaya çalışıyor.
Çoğu tarayıcı, onclick gibi kullanıcı tarafından tetiklenen olay işleyicilerin dışında çağrılırsa açılır pencereleri engeller.
Düşünürseniz, bu biraz aldatıcıdır. Kod doğrudan bir onclick işleyicisindeyse, bu kolaydır. Peki setTimeout'ta açılır pencere nedir?
Bu kodu deneyin:
// open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);
Pop-up Chrome'da açılıyor, ancak Firefox'ta engelleniyor.
… Ve bu Firefox'ta da çalışıyor:
// open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);
Aradaki fark, Firefox'un 2000 ms veya daha az bir zaman aşımı olarak kabul edilebilir olmasıdır, ancak ondan sonra - artık "kullanıcı eyleminin dışında" olduğunu varsayarak "güveni" kaldırır. Yani birincisi bloke edilir, ikincisi bloke olmaz.
2012'de geçerli olan orijinal cevap:
Açılır pencere engelleyici kontrolü için bu çözüm FF (v11), Safari (v6), Chrome (v23.0.127.95) ve IE (v7 ve v9) 'da test edilmiştir. Hata mesajını uygun gördüğünüz şekilde işlemek için displayError işlevini güncelleyin.
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.");
}
};
Kullanımı:
var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);
Bu yardımcı olur umarım! :)