【问题标题】:Calling window.open() multiple times fails after the first time第一次后多次调用 window.open() 失败
【发布时间】:2019-01-31 03:15:30
【问题描述】:

我有一个脚本可以遍历多个 url 并在新选项卡中打开它们。它曾经工作,但现在只打开第一个。甚至还有一个据说可以打开多个窗口的 w3schools 测试编辑器,但在第一个窗口之后它也失败了:

https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open6

但是,如果我在调试模式下单步执行并每次将焦点重置为原始选项卡,它确实会打开每个窗口。所以我的问题是,如何打开多个窗口(选项卡),但使用原始脚本将焦点放在我的窗口上?它曾经这样做,但现在,只要添加一个新选项卡,它就会获得焦点,并且脚本停止打开窗口。这是完整的 w3schools 失败脚本:

<!DOCTYPE html>
<html>
<body>

<p>Click the button to open multiple windows.</p>

<button onclick="myFunction()">Open Windows</button>

<script>
function myFunction() {
    window.open("http://www.google.com/");
    window.open("https://www.w3schools.com/");
}
</script>

</body>
</html>

【问题讨论】:

  • 不要省略“窗口名称”参数,使用例如“_blank”作为名称,或者为每个窗口指定一个唯一的名称。
  • 我相信 chrome 有一项安全功能,每个 window.open 至少需要一个用户操作,我可能错了。
  • Firefox 为我打开了两个窗口; Chrome 和 Safari 只打开了第一个。 Chrome 还显示“弹出窗口被阻止”消息,允许我禁用该安全功能; @FZs 你可能已经禁用它了吗?
  • @DanielBeck 是的,我检查过了,它已启用。当我禁用它们时,只有Google 打开...
  • @FZs 是的,“启用”表示您已启用弹出窗口,即禁用安全功能(阻止弹出窗口)。 Chrome 的用户界面令人困惑,那里......

标签: javascript google-chrome


【解决方案1】:

我认为正如@Daniel Sharp 所说,chrome 中有一个安全功能。它在 FF 和 IE 中运行良好。

如果我按照以下步骤操作,它会起作用:

  1. 单击打开窗口(将打开一个新窗口
  2. 点击初始浏览器标签
  3. 单击页面上的某处(打开 Windows 按钮除外
  4. 再次单击“打开窗口”(这次它可以正常工作 - 打开两个窗口

【讨论】:

    【解决方案2】:

    正如另一个答案和 cmets 所述,这是一项安全功能。

    值得补充的是,您可以禁用它(基于每个站点):只需单击地址栏右端的小“弹出窗口阻止程序”图标并启用当前站点的弹出窗口。

    之后,您可以随意拍摄任意数量的window.open

    【讨论】:

      【解决方案3】:

      窗口名称应该是唯一的。否则会刷新同一页面

      function myFunction() {
          window.open("https://www.google.com/","_google","height=200,width=150");
          window.open("https://www.w3schools.com/","_w3schools","height=200,width=150");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 2018-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多