Như một thực tiễn tốt, tôi nghĩ rằng nên kiểm tra xem cửa sổ bật lên có bị chặn hay không và hãy hành động trong trường hợp. Bạn cần biết rằng window.open có giá trị trả về và giá trị đó có thể là null nếu hành động thất bại. Ví dụ: trong đoạn mã sau:
function pop(url,w,h) {
n=window.open(url,'_blank','toolbar=0,location=0,directories=0,status=1,menubar=0,titlebar=0,scrollbars=1,resizable=1,width='+w+',height='+h);
if(n==null) {
return true;
}
return false;
}
nếu cửa sổ bật lên bị chặn, window.open sẽ trả về null. Vì vậy, hàm sẽ trả về false.
Ví dụ: hãy tưởng tượng gọi hàm này trực tiếp từ bất kỳ liên kết nào với target="_blank"
: nếu cửa sổ bật lên được mở thành công, việc trả về
false
sẽ chặn hành động liên kết, nếu không thì cửa sổ bật lên bị chặn, việc trả về true
sẽ cho phép hành vi mặc định (mở cửa sổ _blank mới) và tiếp tục .
<a href="http://whatever.com" target="_blank" onclick='return pop("http://whatever.com",300,200);' >
Bằng cách này, bạn sẽ có một cửa sổ bật lên nếu nó hoạt động và cửa sổ _blank nếu không.
Nếu cửa sổ bật lên không mở, bạn có thể:
- mở một cửa sổ trống như trong ví dụ và tiếp tục
- mở một popup giả mạo (một iframe bên trong trang)
- thông báo cho người dùng ("vui lòng cho phép cửa sổ bật lên cho trang web này")
- mở một cửa sổ trống và sau đó thông báo cho người dùng, v.v.