2011-01-11 159 views
11

我试图打开一个新的窗口,像这样:打开新窗口,镀铬

$('#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()适用于所有浏览器,所以似乎有某些东西阻止在Safari/Chrome中执行window.open。此外,如果我删除了setTimeout并且只调用了window.open,那么它在所有3个浏览器中都能正常工作。这几乎就像window.openclick事件嵌套得太远,然后它在Safari/Chrome中不起作用。

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

任何想法?

回答

14

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

+1

还值得注意的是,虽然Safari和Chrome有默认打开和打开这些严格的弹出窗口拦截器,并不是其他浏览器没有它们 - 这只是为其他浏览器它们要么是加载项,要么不是在安装时自动打开的。 – 2011-01-12 16:46:38

7

我通过检查未定义的window.open()的返回值来解决这个问题。如果这是真的,则调用alert()并向用户发送消息以禁用其弹出窗口阻止程序。

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

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

有用的回复。谢谢。 – matthewpavkov 2014-02-06 01:50:08

0

另一个解决方法
只要打开与接受并取消选项,并附加window.open
行动,接受按钮,它会工作的弹出。它为我工作...