合法地避免弹出窗口阻塞

gil*_*les 14 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>
Run Code Online (Sandbox Code Playgroud)

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

在其中Bobince评论

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

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

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

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

And*_*eas 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');
}
Run Code Online (Sandbox Code Playgroud)

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