大多数浏览器都内置有弹出窗口屏蔽程序,在弹出窗口被屏蔽时,就应该考虑两种可能性。如果是浏览器内置的屏蔽程序阻止的弹出窗口,那么window.open()很可能返回null。此时,只要检测这个返回的值就可以确定弹出窗口是否被屏蔽了,如下面的例子所示:
var wroxWin = window.open("http://www.w3cmm.com", "_blank"); if (wroxWin == null) { alert("糟糕!弹出窗口被屏蔽了"); }
如果浏览器扩展或其它程序阻止的弹出窗口,那么window.open()通常会抛出一个错误。因此要像准确地检测弹出窗口是否被屏蔽,必须在检测返回值的同时,将对window.open()调用封装在一个try-catch块中,如下所示:
var blocked = false; try { var wroxWin = window.open("http://www.w3cmm.com", "_blank"); if (wroxWin == null) { blocked = true; } } catch (ex) { blocked = true; } if (blocked) { alert("糟糕!弹出窗口被屏蔽了"); }
在任何情况下,以上代码都可以检测出调用window.open()打开的弹出窗口是不是被屏蔽了。但要注意的是,检测弹出窗口是否被屏蔽知识一方面,它并不会阻止浏览器显示与被屏蔽的弹出窗口有关的消息。