这个问题多次出现在“如何检查弹出窗口是否在我的浏览器上被阻止”中,我找到的所有解决方案都提出了一个解决方案,其中打开了一个新的弹出窗口进行测试。
参考文献:
等。
我想知道是否有可能知道阻塞的弹出窗口,而不是实际打开一个。
因为很多原因导致测试弹出可能需要一段时间才能完成,这在您的应用程序的开始页面看起来很难看。
例如,如果我们可以使用来自客户端的请求标头中的任何内容,就像我们可以获得语言首选项一样了解弹出首选项等。
这将是一个巨大的帮助。感谢
答案 0 :(得分:3)
据我所知,弹出窗口阻止程序通过覆盖window.open
函数来工作,并且在大多数情况下返回null
。因此,一种方法是检测window.open
是否仍然是nativ功能。
您可以使用toString
方法对其进行测试,该方法将[native code]
作为该函数的主体返回。 toString
在旧的IE中不起作用,因此请使用''+
来转换函数。
var havePopupBlockers = ('' + window.open).indexOf('[native code]') === -1;
这不是银弹,但可以发现潜在的风险。我在Chrome,FF,IE8和IE9上使用一些不同的弹出窗口阻止程序和工作进行测试。