Установить фокус всплывающего окна каждый раз
У меня есть две страницы 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 на
- Перейти в Инструменты -> Параметры -> Содержание
- Убедитесь, что "Включить JavaScript" включен.
- Рядом с "Включить JavaScript" нажмите кнопку "Дополнительно".
- Убедитесь, что в поле есть галочка [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();
Это всегда откроет ваше всплывающее окно, даже если оно не закрыто.