Подтвердить что ты не робот

В Google Chrome, как мне добавить существующее всплывающее окно на передний план, используя javascript из родительского окна?

Я хотел бы иметь кнопку на веб-странице со следующим поведением:

  • При первом нажатии откройте всплывающее окно.
  • При более поздних кликах, если всплывающее окно все еще открыто, просто принесите его на передний план. Если нет, повторно откройте.

Нижеприведенный код работает в Firefox (Mac и Windows), Safari (Mac и Windows) и IE8. (Я еще не тестировал IE6 или IE7.) Однако в Google Chrome (как в 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>

Предыстория: я повторно спрашиваю этот вопрос специально для Google Chrome, так как я думаю, что мой код решает проблему, по крайней мере, для других современных браузеров и IE8. Если для этого есть предпочтительный этикет, пожалуйста, дайте мне знать.

4b9b3361

Ответ 1

Вы не можете. Window.focus отключен в Chrome по соображениям безопасности, и это вряд ли изменится.

Вам нужно закрыть и обновить соответствующее окно.

Ответ 2

Почему бы не просто выполнить popopWindow.focus() после вызова window.open? Это также не помешает сделать это там, и это должно гарантировать, что ваше новое окно будет показано поверх текущего.

Ответ 3

Вам нужно настроить исходное окно на размытие и новое окно для фокусировки.

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

Ответ 4

Следующий код работает для меня при вызове в обработчике onclick:

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

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

Этот код работает, пытаясь получить доступ к всплывающему местоположению, если его около: пустое его новое всплывающее окно и URL-адрес установлен. В противном случае, если окно с таким же именем "всплывающее имя" уже открыто, всплывающее окно попадает в фокус. Этот код нужно вызывать из обработчика onclick, иначе он не будет работать.