【发布时间】:2010-10-14 16:11:06
【问题描述】:
我知道 javascript 技术可以检测弹出窗口是否在其他浏览器中被阻止(如 the answer to this question 中所述)。这是基本测试:
var newWin = window.open(url);
if(!newWin || newWin.closed || typeof newWin.closed=='undefined')
{
//POPUP BLOCKED
}
但这在 Chrome 中不起作用。当弹出窗口被阻止时,永远不会到达“POPUP BLOCKED”部分。
当然,测试在一定程度上是有效的,因为 Chrome 实际上并没有阻止弹出窗口,而是在右下角的一个最小化窗口中打开它,其中列出了“被阻止”的弹出窗口。
我想做的是能够判断弹出窗口是否被 Chrome 的弹出窗口阻止程序阻止。我尽量避免浏览器嗅探以支持特征检测。有没有办法在没有浏览器嗅探的情况下做到这一点?
编辑:我现在尝试使用newWin.outerHeight、newWin.left 和其他类似属性来完成此操作。当弹出窗口被阻止时,谷歌浏览器将所有位置和高度值返回为 0。
不幸的是,即使弹出窗口实际打开了未知的时间,它也会返回相同的值。经过一段神奇的时间(在我的测试中几秒钟),位置和大小信息作为正确的值返回。换句话说,我还没有更接近于弄清楚这一点。任何帮助将不胜感激。
【问题讨论】:
-
Yoav,无论弹出窗口是否被阻止,位置显示都相同。其他人的答案不涉及让用户等待 3.5 秒吗?
-
InvisibleBacon 和 Andy 的最新解决方案在 Chrome 10 中不起作用:即使成功显示了测试弹出窗口,也会出现“chrome 失败”消息。有什么想法吗?
-
我认为应该提出一个新问题,因为其中一些解决方案似乎只适用于早期版本的 Chrome。
-
@George Bailey 我同意,但为了清楚起见,其中一些确实适用于当前版本的 Chrome (19)。 Andrew 最初使用 outerHeight (或 screenX,正如其他人所建议的那样)的想法对我来说效果很好,并结合了 setTimeout 方法。但是,是的,在我进行自己的测试之前,试图理解所有这些答案真的很令人困惑。
标签: javascript google-chrome popup