2011-05-31 447 views
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和铬的一些菌株出现像这样对待它。我一直在努力修复,最近消化了this post

在它Bobince评论

这些天来,你并不真的需要问这个问题:“我是不请自来的弹出窗口被阻止?”,因为答案必然是“是” - 所有的主流浏览器有弹出式窗口拦截器默认打开。最好的办法是只用window.open()来响应直接点击,这几乎总是允许的。我很高兴能够购买这个原则,因为我只想让我的弹出窗口打开。

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

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

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

+0

在所有主流浏览器中,我的作品适合我的作品。它在哪里不适合你?您可能仍然遇到更严厉的第三方弹出窗口或脚本拦截器的问题,但情况总是如此。最好提供一个正常的链接到你的主要交互页面,所以它仍然可以在没有弹出窗口的情况下使用。 (就我个人而言,我会永远使用它,因为我是众多用户中完全鄙视他们的用户之一。) – bobince 2011-05-31 20:14:39

+0

哇!感谢您的测试。我已经获得了关于win7块的ie9报告,只有短暂的警告信息对于大多数人来说很容易监控 – giles 2011-05-31 22:33:00

+0

在IE9/Win7 FWIW中为我工作。 – bobince 2011-05-31 23:03:08

回答

6

没有什么可以做的。您可以要求您的用户禁用弹出窗口阻止程序,或通过检查window.open()返回的窗口对象ref来启用弹出窗口阻止程序。

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

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

+0

有趣的......将这项工作的所有实例的阻止? ...(如果是这样,我可以构建一个if - else语句来打开弹出窗口或返回警报?) – giles 2011-06-01 06:46:07

+0

如果弹出窗口被阻止,您不应该获得新窗口的引用。我不是100%肯定的,但你可以尝试一下代码。您可以显示警报或使用Brad在他的回答中建议的内容 – Andreas 2011-06-01 17:41:39

+0

检查'!w'不够用。请参阅:http://stackoverflow.com/a/1089792/103842 – 2012-01-17 17:51:39

4

没有什么可以做这件事。某些弹出窗口阻止程序仍会阻止所有内容,即使响应用户的点击。你所能做的最好的是建议你的用户关闭弹出窗口拦截器,或者找到一种不同的方式来做你想做的事情。一种流行的方法是在您的页面上显示其他所有内容的div,例如Lightbox

many jQuery plugins这使这很容易。

+0

+1。 Facebox是一个很好的解决方案。 http://defunkt.io/facebox/ – 2011-05-31 20:14:37

+0

好的,我明白你的意思了,但这个解决方案是否安全?我们的许多用户仍然大约是IE6 – giles 2011-05-31 22:38:51

+0

@giles,jQuery通常对IE6工作正常,我想大多数插件也是如此。测试它,如果它不起作用,请尝试不同的插件或改变你的方法。 – Brad 2011-06-01 00:02:10

0

你(至少?)2个选项来处理这个:

  • ,如果你想使用弹出窗口,以保持,显示您的用户带来非常明显的警告,他们指出说明如何配置自己的浏览器将您的域名列入白名单(例如,当您获得新的权限,甚至像Chrome浏览器显示的动作横幅一样,它们出现在StackOverlow.com顶部的横幅 - 它们也是基于网页的);
  • 使用iFrame并根据用户的点击加载其内容。
相关问题