【问题标题】:How do I bring an already existing open window to the front on top of other windows from another windows code?如何从另一个窗口代码将已经存在的打开窗口放在其他窗口的前面?
【发布时间】:2010-03-27 19:09:02
【问题描述】:

这个问题是相当描述性的,但我会进一步描述它。

基本上,我有window1。单击按钮链接将打开window2。单击window2 中的按钮会打开window3,单击window3 中的按钮应将window2 带回到window2 顶部的屏幕前部。

我不确定这是如何完成的,但是我已经使用并玩弄了 focus()、opener 和其他各种方法,但我似乎无法让它正常工作。

【问题讨论】:

  • 快速解决方案,不要使用弹出窗口,而是使用图层和 UI 库(例如 jQuery UI 对话框)在页面内处理它。在这个时代,弹出窗口非常烦人。
  • @MaxShawabkeh,有时我们别无选择,如果用户不在响应式网站或 SPA 上,则在模式/对话框上打开会阻止用户在网站上导航。

标签: javascript html windows dom-events


【解决方案1】:

更新:这在 Chrome (21+) 之后就没有用了。解决方法是关闭/重新打开。

以下代码适用于 Firefox(Mac 和 Windows)、Safari(Mac 和 Windows)和 IE8(当然是 Windows)。我没有测试过 IE6 或 IE7。

但是,它在适用于 Mac 或 Windows 的 Chrome 上运行。具体来说,单击按钮一次会创建弹出窗口并将其带到前面。但是,返回原始窗口并再次单击按钮不会重新调整弹出窗口的焦点。

<head>
  <script type="text/javascript">
    var popupWindow = null;
    var doPopup = function () {
      if (popupWindow && !popupWindow.closed) {
        popupWindow.focus();
      } else {
        popupWindow = window.open("http://google.com", "_blank",
          "width=200,height=200");
      }
    };
  </script>
</head>

<body>
  <button onclick="doPopup(); return false">
    create a pop-up
  </button>
</body>

【讨论】:

【解决方案2】:

更新:这在 Chrome (21+) 之后就没有用了。解决方法是关闭/重新打开。

opener.focus()

确实有效。如果它不适合您,我们将需要一个测试用例。

一些可能会导致问题的事情:在触发之前按钮的窗口由于单击而获得焦点的事件处理程序中调用它(但我认为通常情况并非如此) ;在浏览器上运行它,而不是将弹出窗口填充到浏览器选项卡中。

(我同意 Max 的评论。通常最好避免使用跨窗口脚本的弹出窗口。)

【讨论】:

  • window.focus() 对我也不起作用,经常
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多