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

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

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

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

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

note: Я установил имя всплывающего окна как "два"

Ответы

Ответ 1

вы можете выполнить с помощью 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>

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

  • Перейдите в Инструменты → Параметры → Контент
  • Убедитесь, что включен режим "Включить JavaScript".
  • Рядом с "Включить JavaScript" нажмите кнопку "Дополнительно".
  • Убедитесь, что в поле есть отметка.  [x] Поднять или опустить окна

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

К сожалению, некоторые современные браузеры по-прежнему не поддерживают фокусировку вкладок, например, эту запись в 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. Chrome работает хорошо.

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