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

mat*_*kov 11 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);
});
Run Code Online (Sandbox Code Playgroud)

这适用于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源,或者我会在那里处理它.

有任何想法吗?

Ben*_*Lee 14

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


小智 7

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

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

if (myWin == undefined)
   alert('Please disable your popup blocker');
Run Code Online (Sandbox Code Playgroud)