合法地避免弹出窗口阻塞

时间:2011-05-31 20:02:50

标签: javascript

是什么原因导致某些浏览器将我的代码视为未经请求的?

我有一个致力于帮助人们进行互动会话的网站。它从用户单击[开始]开始,因此这是一个同意的操作。这应该(1)打开弹出窗口,同时(2)将第一页重定向到结束页面,如下所示:

<head>  
<SCRIPT language="JavaScript">
      function openwindow(){window.open("{INTERACTION}","interaction","resizable=0,width=800,height=600,status=0");}</SCRIPT>
</head>   
<body>
<FORM action="end.php" method="{METHOD}" >  
<input type="submit"  class="button" 
       onClick="javascript: openwindow()" 
       value="Begin" />
</FORM>
</body>

如上所述,这不是试图打开一个未经请求的弹出窗口,但IE和Chrome的某些版本似乎正在处理它。我一直试图修复,最近消化this post

在其中Bobince评论

  

这些天,你真的不需要问“我的主动弹出窗口被阻止了吗?”,因为答案总是“肯定” - 所有主流浏览器都默认打开弹出窗口阻止程序。最好的方法是只对window.open()响应直接点击,这几乎总是允许的。我很乐意接受这个原则,因为我只想让我的弹出窗口打开。

是什么原因导致某些浏览器将我的代码视为未经请求的?

我很感激你能给我的任何帮助。 (正如你可能已经猜到的那样,客户端不是我的包,这个话题一直困扰着我多年。)

非常感谢(手指交叉) 贾尔斯

3 个答案:

答案 0 :(得分:6)

你无能为力。您可以通过检查window.open()

返回的窗口对象引用来禁止弹出窗口阻止程序或通知它们弹出窗口阻止程序。

e.g。

var w = window.open('http://domain.com');
if(!w) { 
   //an alert in this example
   alert('oops..seems like a pop-up blocker is enabled. Please disable');
}

你可以找到另一种方式并尝试布拉德的建议。

答案 1 :(得分:4)

你无能为力。即使响应用户点击,一些弹出窗口阻止程序仍会阻止所有内容。您可以做的最好的事情是建议您的用户关闭弹出窗口阻止程序,或者找到一种不同的方式来执行您想要执行的操作。一种流行的方法是在您的网页上显示在所有其他网页上的div,例如Lightbox

many jQuery plugins使这很容易。

答案 2 :(得分:0)

你有(至少?)2个选项可以解决这个问题:

  • 如果您想继续使用弹出窗口,请为您的用户显示一个非常明显的警告,指出他们如何配置浏览器以将您的域列入白名单的说明(例如当您获得新内容时,显示在StackOverlow.com顶部的横幅特权,甚至是Chrome为行动展示的横幅 - 它们也是基于网络的);
  • 使用iFrame并根据用户的点击加载其内容。