Установить фокус всплывающего окна каждый раз

У меня есть две страницы one.html и two.html

Я открываю новое окно, используя следующий код

//here popup is a global variable
popup=window.open('two.html','two');

в первый раз всплывающее окно открывается успешно и получает фокус, но если я пытаюсь открыть его снова, не закрывая уже открытое всплывающее окно, то two.html не получает фокус во второй раз.

примечание: я установил имя всплывающего окна как 'два'

10 ответов

Вы можете достичь с помощью focus функция как используется ниже

<script language="javascript" type="text/javascript">
<!--
function popitup(url) {
    newwindow=window.open(url,'name','height=200,width=150');
    if (window.focus) {newwindow.focus()}

      if (!newwindow.closed) {newwindow.focus()}
    return false;
}

// -->
</script>
focusedWindow = window.open('two.html','two').focus();

Непосредственно добавьте focus() к прототипу window.open

Мое эмпирическое решение, которое всегда работает:

setTimeout('detail.focus()', 1);

Прикрепление .focus() сразу после открытия не всегда работает, ни вызывает .focus() без setTimeout.

Я знаю, что это некрасиво (хотел избавиться от этого прямо сейчас, спустя несколько лет, но безуспешно), и я не знаю точных причин, почему и как, но это работает.

Вы можете закрыть всплывающее окно, прежде чем открывать его, если проверяете, открывается ли оно уже при вызове функции.

var popup;
​function openPop() { 
    if ("close" in popup) popup.close();
    popup = window.open("http://stackru.com", "test", "width=200, height=200");​​​​​​​​
}

Это гарантирует, что всплывающее окно всегда появляется сверху.

var win = window.open('two.html','two');
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window.

Проверьте настройки Firefox 2 на

  1. Перейти в Инструменты -> Параметры -> Содержание
  2. Убедитесь, что "Включить JavaScript" включен.
  3. Рядом с "Включить JavaScript" нажмите кнопку "Дополнительно".
  4. Убедитесь, что в поле есть галочка [x] Поднять или опустить окна

Если настройка "Поднять или опустить окна" отключена, то это отключает метод window.focus().

Я нашел ответ для себя, который работает. В html тела всплывающего окна добавьте в тег body onload="this.window.focus()". Даже если вы минимизируете окно, оно снова появляется спереди и по центру. Обязательно и назовите окно в вашем скрипте выполнения window.open('url','some name','vars'); Надеюсь, это поможет вам!

Просто добавьте.focus() в строку window.openwindow.open('two.html','two').focus()

У меня была такая же проблема, и, похоже, это работает как в веб-браузерах Firefox, так и в Chromium. На своем веб-сайте https://thaiiceland.com/ я заметил, что если всплывающее окно было открыто, фокус не переходил на всплывающее окно, и вы чувствуете, что ничего не происходит, когда вы нажимаете на эту ссылку. Поэтому я ищу и пытаюсь просто добавить.focus() в конец строки window.open, и все работает.

<a href="currency.html" onclick="javascript:void window.open('currency.html','thaiice02','width=900,height=560,scrollbars=1,resizable=1,top=80,left=150').focus();return false;">Curency converter - แปลงสกุลเงิน</a>

К сожалению, некоторые современные браузеры все еще не поддерживают фокусирующие вкладки, например, смотрите эту запись об ошибке в Firefox.

Тем не менее, следующий код работает хорошо для меня. В качестве обходного пути он открывает окно / вкладку, если на него нельзя сфокусироваться:

  var win = window.open("two.html", "two")
  win.focus();
  setTimeout(function() {
    if(document.hasFocus()) {
      win.close();
      window.open("two.html", "two")
    }
  }, 1);

В первой строке он открывает окно и пытается сфокусировать его, используя вторую строку. Если окно с именем two там уже нет, новое окно / вкладка не открыта, но используется повторно.

Хитрость в том, что мы проверяем, фокусируется ли текущее окно, используя document.hasFocus(), Если это так, мы закрываем окно и снова его открываем. Это только для браузеров, которые не поддерживают фокусировку вкладки, которую нужно использовать напрямую. В настоящее время это касается FF и IE/MS Edge. Хром хорошо работает.

Однако непосредственно после использования window.open, document.hasFocus() всегда возвращает true (так сказать, также в Chrome). Обходной путь должен использовать setTimeout одна мс позже.

setTimeout(function () { 
  window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100);

-> Этот код используется для фокусировки на новом открытом окне. -> Поместите его в javascript.('SetTimeout - встроенная функция javascript') -> Много раз случается, что при открытии всплывающего окна оно идет за старым окном, поэтому выше очень полезно сфокусироваться на новом окне.

Это решение с одним вкладышем, используйте фокус на вашем всплывающем var:

popup=window.open('two.html','two');
popup.focus();

Это всегда откроет ваше всплывающее окно, даже если оно не закрыто.

Другие вопросы по тегам