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

时间:2014-09-29 07:12:06

标签: javascript jquery popup

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

  

参考文献:

     
      
  1. Detect blocked popup in Chrome

  2.   
  3. How can I detect if a browser is blocking a popup?

  4.   

等。

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

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

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

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

1 个答案:

答案 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上使用一些不同的弹出窗口阻止程序和工作进行测试。