我正试图像这样打开一个新窗口:
$('#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源,或者我会在那里处理它。
有什么想法吗?
答案 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按钮,它就可以了。它对我有用......