Каждый раз настраивать фокус всплывающего окна
У меня есть две страницы 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
через один миллион позже.