点击事件在Safari,Chrome中无效后打开新窗口

时间:2011-01-11 23:29:49

标签: javascript cross-browser window.open

我正试图像这样打开一个新窗口:

$('#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中无效。

所以你知道,我有一个全Flash网站,我试图在新窗口中打开外部链接,所以我正在读取URL中的哈希标记(例如htp:// example。 com /#/ facebook /)如果它匹配某些项目,那么我正在调用window.open来打开一个特定的URL。我无权访问Flash源,或者我会在那里处理它。

有什么想法吗?

3 个答案:

答案 0 :(得分:14)

Safari / Chrome内置弹出式窗口拦截器可阻止其工作。允许在Safari / Chrome中打开新窗口的唯一JavaScript是javascript直接附加到点击处理程序(和其他直接用户输入处理程序)。在过去的版本中,人们想出了一些欺骗的方法(比如生成一些其他元素 - 表格或div - 并使用javascript模拟用户输入),但更新的版本更聪明地检测到这一点。我建议重新配置一些东西,这样你就不会使用延迟弹出窗口 - 毕竟这种东西通常会让用户感到不快。

答案 1 :(得分:7)

我通过检查window.open()的返回值来解决这个问题。如果这是真的,请调用alert(),并提供一条消息,供用户禁用其弹出窗口阻止程序。

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

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

答案 2 :(得分:0)

另一种解决方法
只需打开一个带有ACCEPT和CANCEL选项的弹出窗口,并将window.open
动作附加到ACCEPT按钮,它就可以了。它对我有用......