установить фокус всплывающего окна каждый раз - PullRequest
16 голосов
/ 03 июня 2010

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

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

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

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

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

Ответы [ 10 ]

12 голосов
/ 03 июня 2010

вы можете достичь с помощью функции 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>
8 голосов
/ 03 июня 2010
focusedWindow = window.open('two.html','two').focus();

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

6 голосов
/ 29 марта 2011

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

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

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

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

2 голосов
/ 04 августа 2010
var win = window.open('two.html','two');
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window.
1 голос
/ 16 августа 2016

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

1 голос
/ 22 июля 2010

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

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

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

1 голос
/ 03 июня 2010

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

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

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

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

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

0 голосов
/ 18 июля 2014

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

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

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

0 голосов
/ 30 июля 2013
setTimeout(function () { 
  window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100);

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

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