在不打开弹出窗口的情况下检测阻止的弹出窗口

关于“如何检查弹出窗口是否在我的浏览器上被阻止”这个问题已多次提出,我找到的所有解决方案都提出了一个解决方案,其中打开了一个新的弹出窗口进行测试。

参考文献:

  1. “ 检测Chrome中阻止的弹出窗口 ”

  2. “ 我如何检测浏览器是否阻止弹出窗口? ”

等等

我想知道是否有可能知道阻塞的弹出窗口,而不是实际打开一个。

因为很多原因导致测试弹出可能需要一段时间才能关闭,这在应用程序的开始页面看起来很难看。

例如,如果我们可以使用来自客户端的请求标头中的任何内容,就知道弹出首选项等,就像我们可以获得语言首选项一样。

这将是一个巨大的帮助。 谢谢

据我所知,弹出窗口阻止程序通过覆盖window.open函数来工作,并且在大多数情况下返回null 。 所以一种方法是检测window.open是否仍然是nativ函数。

您可以使用toString方法对其进行测试,该方法将[native code]作为该函数的主体返回。 toString在旧IE中不起作用,所以不要使用''+来转换函数。

var havePopupBlockers = ('' + window.open).indexOf('[native code]') === -1;

这不是银弹,但可以发现潜在的风险。 我在Chrome,FF,IE8和IE9上使用一些不同的弹出窗口拦截器和工作进行测试。