【问题标题】:Open new window after a click event not working in Safari, Chrome单击事件后打开新窗口在 Safari、Chrome 中不起作用
【发布时间】:2011-06-07 12:34:59
【问题描述】:

我正在尝试像这样打开一个新窗口:

$('#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.html)。 com/#/facebook/) 并且如果它与某些项目匹配,那么我将调用 window.open 打开特定的 URL。我无权访问 Flash 源,否则我会在那里处理。

有什么想法吗?

【问题讨论】:

    标签: javascript cross-browser window.open


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      var myWin = window.open([args]);
      
      if (myWin == undefined)
         alert('Please disable your popup blocker');
      

      【讨论】:

      • 有用的回应。谢谢。
      【解决方案3】:

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

      【讨论】:

      • 另外值得注意的是,虽然 Safari 和 Chrome 内置了这些严格的弹出窗口阻止程序并默认打开,但并不是其他浏览器没有它们——只是其他浏览器有它们附加组件或未在安装时自动打开。
      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多