В Google Chrome, как я могу вывести существующее всплывающее окно вперед, используя JavaScript из родительского окна? - PullRequest
10 голосов
/ 24 апреля 2010

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

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

Приведенный ниже код работает в 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. Если для этого есть предпочтительный этикет, пожалуйста, дайте мне знать.

Ответы [ 5 ]

8 голосов
/ 24 апреля 2010

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

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

0 голосов
/ 07 августа 2018

На сегодняшний день просто вызов focus () для ссылки на всплывающее окно просто работает и выводит окно на передний план. Я использую Chrome версии 62

0 голосов
/ 30 апреля 2016

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

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

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

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

0 голосов
/ 24 апреля 2010

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

var popup = {  //popup = object literal representing your popup
    execute = (function () {
        popup.win = window.open();
        popup.win.focus();
    }());
};
window.blur();
0 голосов
/ 24 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...