有没有一种好方法可以确定一个人是否启用了弹出窗口拦截器?我需要维护一个Web应用程序,不幸的是它有大量弹出窗口,我需要检查用户是否启用了弹出窗口阻止程序。
我发现这样做的唯一方法是从javascript打开一个窗口,检查它是否打开以确定是否启用了阻止程序然后立即关闭它。
这有点令人讨厌,因为没有启用它的用户会在窗口打开和关闭时在屏幕上看到一个小闪光灯。
是否还有其他非突兀的方法来实现这一目标?
答案 0 :(得分:6)
阅读Detect a popup blocker using Javascript:
基本上你检查'window.open'方法是否返回新打开的窗口的句柄。
看起来像这样:
var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no');
if(mine)
var popUpsBlocked = false
else
var popUpsBlocked = true
mine.close()
答案 1 :(得分:3)
正如其他人所说的那样,你必须尝试并看到,但是对于所有浏览器来说,检查生成的窗口对象是非“虚假”是不够的。
当弹出窗口被阻止时,Opera仍会返回Window
对象,因此您必须充分检查该对象以确定它是否是真正的窗口:
var popup = window.open(/* ... */);
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");
答案 2 :(得分:2)
正如其他人所评论的那样,唯一能找到答案的方法就是尝试一下。
然而,对于“安装了弹出式窗口拦截器”这个问题,一个很好的近似答案是“是”。默认情况下,所有最近的浏览器都会阻止您的弹出式窗口,因此您最好将应用程序设计为优雅地应对此问题。也就是说,除了对用户交互(通常是onclick)的反应之外,不要尝试window.open,你会没事的。
答案 3 :(得分:1)
我认为没有任何方法可以在不尝试打开窗口的情况下检测到这种情况,因为弹出窗口阻止程序不会添加任何可以在JS中查询的内容。
答案 4 :(得分:0)
为响应用户的操作而打开的弹出窗口 - 例如点击链接 - 不应被弹出窗口阻止程序阻止。