Cập nhật: Popups tồn tại từ thời cổ đại. Ý tưởng ban đầu là hiển thị một nội dung khác mà không đóng cửa sổ chính. Đến bây giờ, có nhiều cách khác để làm điều đó: JavaScript có thể gửi yêu cầu cho máy chủ, vì vậy cửa sổ bật lên hiếm khi được sử dụng. Nhưng đôi khi chúng vẫn tiện dụng.
Trong quá khứ các trang web ác lạm dụng quảng cáo rất nhiều. Một trang xấu có thể mở hàng tấn cửa sổ bật lên với quảng cáo. Vì vậy, bây giờ hầu hết các trình duyệt cố gắng chặn cửa sổ bật lên và bảo vệ người dùng.
Hầu hết các trình duyệt chặn cửa sổ bật lên nếu chúng được gọi bên ngoài trình xử lý sự kiện do người dùng kích hoạt như onclick.
Nếu bạn nghĩ về nó, đó là một chút khó khăn. Nếu mã trực tiếp trong một trình xử lý onclick, thì điều đó thật dễ dàng. Nhưng cửa sổ bật lên mở trong setTimeout là gì?
Hãy thử mã này:
// open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);
Cửa sổ bật lên mở trong Chrome, nhưng bị chặn trong Firefox.
Và điều này cũng hoạt động trong Firefox:
// open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);
Sự khác biệt là Firefox xử lý thời gian chờ từ 2000ms trở xuống là có thể chấp nhận được, nhưng sau đó - loại bỏ sự tin tưởng của Cameron, giả sử rằng bây giờ, nó nằm ngoài hành động của người dùng. Vì vậy, cái đầu tiên bị chặn, và cái thứ hai thì không.
Câu trả lời ban đầu là năm 2012:
Giải pháp này để kiểm tra trình chặn cửa sổ bật lên đã được thử nghiệm trong FF (v11), Safari (v6), Chrome (v23.0.127.95) & IE (v7 & v9). Cập nhật chức năng displayError để xử lý thông báo lỗi khi bạn thấy phù hợp.
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.");
}
};
Sử dụng:
var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);
Hi vọng điêu nay co ich! :)