在Google Chrome中,如何使用父窗口中的javascript将现有弹出窗口置于最前面?

时间:2010-04-24 05:16:59

标签: javascript google-chrome popup

我想在网页上有一个按钮,其行为如下:

  • 首次点击,打开一个弹出窗口。
  • 稍后点击,如果弹出窗口仍处于打开状态,只需将其置于前面即可。如果没有,请重新打开。

以下代码适用于Firefox(Mac和Windows),Safari(Mac和Windows)以及IE8。 (我还没有测试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>

背景:我正在重新询问this question专门针对谷歌浏览器,因为我认为我的代码至少解决了其他现代浏览器和IE8的问题。如果有这样做的首选礼仪,请告诉我。

5 个答案:

答案 0 :(得分:8)

你做不到。出于安全原因,Chrome中禁用了Window.focus,这种情况不太可能发生变化。

您必须关闭并重新打开相应的窗口。

答案 1 :(得分:0)

为什么不在window.open调用之后执行popopWindow.focus()?在那里做它也不会有什么坏处,它应该确保你的新窗口显示在当前的窗口之上。

答案 2 :(得分:0)

您需要将原始窗口设置为模糊,并将新窗口设置为焦点。

var popup = {  //popup = object literal representing your popup
    execute = (function () {
        popup.win = window.open();
        popup.win.focus();
    }());
};
window.blur();

答案 3 :(得分:0)

以下代码在onclick处理程序中调用时适用于我:

var popup = window.open('', 'popup-name', 'resizable,width=480=height=575');

if(popup.location == 'about:blank') {
    popup.location = 'http://google.com';
    return;
}

此代码的工作原理是尝试访问弹出窗口的位置,如果其位于:空白其新弹出窗口并设置了网址。否则如果窗口名称相同&#39; popup-name&#39;已经打开弹出窗口成为焦点。这个代码确实需要从onclick处理程序调用,否则它将无法工作。

答案 4 :(得分:0)

从今天开始,仅在对弹出窗口的引用上调用focus()即可起作用,并将窗口置于最前面。我正在使用Chrome版本62