合法避免弹窗阻止

14

为什么有些浏览器会将我的代码视为垃圾邮件?

我有一个专门帮助人们进行交互式会话的网站。它始于用户点击【开始】按钮,因此这是经过同意的操作。这个操作应该(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版本似乎把它当作这样处理。我一直在尝试解决这个问题,最近看到了这篇帖子

其中Bobince评论道:

现在,你实际上不需要问“我的未经请求的弹出窗口是否被阻止了?”的问题,因为答案总是“是”——所有主流浏览器默认都启用了弹出窗口拦截器。最好的方法是只有在响应直接点击时才使用window.open(),这几乎总是允许的。我很愿意遵循这个原则,因为我只想要我的弹出窗口打开。

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

我会非常感激你能给我的任何帮助。 (正如你可能已经猜到的那样,客户端并不是我的专长领域,这个话题已经困扰我很长时间了)。

非常感谢您提前的帮助(并祈祷好运)。 Giles


就算不值钱,你的例子在所有主要浏览器上对我都有效。它在你哪里不能工作?你可能仍然会遇到更严格的第三方弹出窗口或脚本阻止程序的问题,但这种情况始终存在。最好提供一个普通链接到你的主交互页面,这样它仍然可以在没有弹出窗口的情况下使用。(个人而言,我总是会这样做,因为我是许多用户中非常厌恶它们的一员。) - bobince
哇!谢谢你的测试。我一直收到报告说ie9在win7上会被阻止,只有一个短暂的警告消息,大多数人都很容易忽略。 - giles
就我而言,在IE9/Win7上可以工作。 - bobince
3个回答

6

您能做的事情不多。您可以要求用户禁用弹出窗口拦截器,或通过检查window.open()返回的窗口对象引用来通知他们启用了弹出窗口拦截器。

例如:

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');
}

你可以尝试另一种方式并尝试Brad的建议。


有趣...这对所有阻塞实例都管用吗?(如果是这样,我可以构建一个if-else语句,要么打开弹出窗口,要么返回一个警告?) - giles
如果弹出窗口被阻止,您不应该获得对新窗口的引用。我不是100%确定,但您可以尝试使用代码。您可以显示警报或使用Brad在他的答案中建议的方法。 - Andreas
仅检查!w是不够的。请参考:https://dev59.com/tXRB5IYBdhLWcg3wSVi1#1089792 - Kaleb Pederson

4

关于这个问题,你无能为力。一些弹窗拦截器仍然会阻止所有弹窗,即使是在用户点击后。你所能做的最好的建议是让用户关闭弹窗拦截器,或者找到其他方法来实现你想要做的事情。一种流行的方法是使用出现在页面所有元素之上的div,比如Lightbox

很多jQuery插件可以轻松实现此功能。


好的,我明白你的观点,但这个解决方案安全吗?我们很多用户仍在使用IE6。 - giles
@giles,jQuery通常与IE6兼容良好,我想大多数插件也是如此。测试一下,如果不行,尝试使用其他插件或改变你的方法。 - Brad

0

你至少有两个选项来处理这个问题:

  • 如果你想继续使用弹出窗口,为你的用户显示一个非常明显的警告,指向如何配置他们的浏览器以将你的域名加入白名单的说明(就像 StackOverlow.com 在你获得新特权时出现的横幅一样,甚至像 Chrome 显示操作的横幅一样 - 它们也是基于 Web 的);
  • 使用 iFrame 并根据用户的点击加载其内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接