点击事件后,打开新窗口,在Safari,Chrome不起作用
-
10-10-2019 - |
题
我正在尝试打开一个新窗口:
$('#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');
另一个解决方法
只需打开带有接受和取消选项的弹出窗口,然后附上窗口即可。
操作到接受按钮,它将起作用。它对我有用...