我正在尝试打开一个新窗口:

$('#wrapper').click(function() {
    window.setTimeout(function() {
        //alert('hi');
        window.open("http://example.com", "ExternalLinks", "resizable=yes, scrollbars=yes, status=yes");
    }, 1000);
});

这在Firefox中起作用,但在Chrome或Safari中不起作用(到目前为止,我刚刚在Mac上进行了测试)。这 alert() 在所有浏览器中都可以使用,因此似乎有一些阻止 window.open 从Safari/Chrome执行。此外,如果我删除 setTimeout 然后打电话给 window.open 然后,它确实可以在所有3个浏览器中工作。几乎就像是 window.open 嵌套在离 click 事件,那么它在Safari/Chrome中不起作用。

因此,您知道,我有一个全闪存网站,我正在尝试在新窗口中打开外部链接,因此我正在阅读URL中的哈希标签(例如htp://example.com/# /facebook/),如果与某些项目匹配,那么我正在打电话 window.open 打开特定的URL。我无法访问Flash源,否则我会在那里处理。

有任何想法吗?

有帮助吗?

解决方案

Safari/Chrome具有内置的弹出式阻滞剂,可以阻止此操作。唯一允许打开Safari/Chrome新窗口的JavaScript是直接连接到单击处理程序(以及其他直接用户输入处理程序)的JavaScript。在过去的版本中,人们发现了一些作弊的方法(例如生成其他元素 - 表单或div-并使用JavaScript模拟用户输入),但是对于检测到这一点,更新版本更聪明。我建议您重新配置事物,以免使用延迟的弹出窗口 - 毕竟通常会给用户震惊的东西。

其他提示

我通过检查window.open()的返回值是否为未定义来解决此问题。如果是True Call Alert(),则带有消息供用户禁用其弹出阻滞剂。

var myWin = window.open([args]);

if (myWin == undefined)
   alert('Please disable your popup blocker');

另一个解决方法
只需打开带有接受和取消选项的弹出窗口,然后附上窗口即可。
操作到接受按钮,它将起作用。它对我有用...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top