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()所有浏览器中都有效,因此似乎有一些东西阻止了window.open在 Safari/Chrome 中执行。此外,如果我删除setTimeout并只调用 thewindow.open那么它在所有 3 个浏览器中都可以工作。这几乎就像如果window.open嵌套距离click事件太远,那么它在 Safari/Chrome 中不起作用。

所以你知道,我有一个全 Flash 网站,我正在尝试让外部链接在新窗口中打开,所以我正在阅读 URL 中的井号标签(例如 htp://example.com/# /facebook/) 并且如果它匹配某些项目,那么我打电话window.open来打开一个特定的 URL。我无权访问 Flash 源,否则我会在那里处理。

有任何想法吗?

4

3 回答 3

15

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

于 2011-01-11T23:54:37.057 回答
8

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

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

if (myWin == undefined)
   alert('Please disable your popup blocker');
于 2014-02-06T00:58:40.600 回答
0

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

于 2015-11-18T11:39:28.343 回答