6

有没有一种好方法可以确定一个人是否启用了弹出窗口阻止程序?我需要维护一个 Web 应用程序,不幸的是它有大量的弹出窗口,我需要检查用户是否启用了弹出窗口阻止程序。

我发现这样做的唯一方法是从 javascript 打开一个窗口,检查它是否打开以确定是否启用了阻止程序,然后立即将其关闭。

这有点烦人,因为没有启用它的用户会在窗口立即打开和关闭时在屏幕上看到一个小闪烁。

有没有其他非侵入性的方法来实现这一点?

4

5 回答 5

8

阅读使用 Javascript 检测弹出窗口阻止程序

基本上,您检查“window.open”方法是否返回新打开窗口的句柄。

看起来像这样:

var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no');
if(mine)
    var popUpsBlocked = false
else
    var popUpsBlocked = true
mine.close()
于 2008-10-30T14:02:57.377 回答
3

正如其他人所说,您必须尝试并查看,但检查生成的窗口对象是否非“虚假”对于所有浏览器来说都是不够的。

当弹出窗口被阻止时, Opera 仍然返回一个Window对象,因此您必须充分检查该对象以确定它是否是一个真实的窗口:

var popup = window.open(/* ... */);
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");
于 2008-10-30T15:53:41.803 回答
2

正如其他人所评论的那样,确定答案的唯一方法就是尝试一下。

但是,对于“是否安装了弹出窗口阻止程序”这个问题,一个很好的近似答案是,这些天,“是”。默认情况下,所有最近的浏览器都会阻止您的弹出窗口,因此您最好设计您的应用程序以优雅地应对这一点。也就是说,除了对用户交互(通常是 onclick)的反应之外,不要尝试 window.open ,你会没事的。

于 2008-10-30T14:33:36.160 回答
1

我认为没有任何方法可以在不尝试打开窗口的情况下检测到这一点,因为弹出窗口阻止程序不会添加任何可以在 JS 中查询的内容。

于 2008-10-30T13:57:40.053 回答
0

响应用户操作(例如单击链接)而打开的弹出窗口不应被弹出窗口阻止程序阻止。

于 2008-10-30T14:40:53.993 回答