【问题标题】:Detect Blocked popups without opening a popup在不打开弹出窗口的情况下检测被阻止的弹出窗口
【发布时间】:2014-09-29 07:12:06
【问题描述】:

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

参考资料:

  1. Detect blocked popup in Chrome

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

等等。

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

由于许多原因,测试弹出窗口可能需要一些时间才能关闭,这在您的应用程序的起始页上看起来很丑。

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

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

【问题讨论】:

  • 解决方法 - 我已将弹出检测测试代码与 cookie 放在一起。如果弹出窗口未被阻止,则每月执行一次测试。此外,我已经减小了窗口大小,使其尽可能不引人注目。

标签: javascript jquery popup


【解决方案1】:

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

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

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

这不是灵丹妙药,但可以检测潜在风险。我在 Chrome、FF、IE8 和 IE9 上使用一些不同的弹出窗口拦截器和作品进行了测试。

【讨论】:

  • 这是一个有趣的技术。感谢分享!
  • 什么是原生代码?如何从浏览器获取?
  • @HasmukhBaldaniya 当您将某些原生函数转换为字符串时,函数内容会显示为[native code]。例如:'' + window.open // return 'function open() { [native code] }'
  • 确实很有趣,而且很有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多