Подтвердить что ты не робот

Javascript Приведет окно к фронту, если оно уже открыто в window.open?

Если вы откроете окно, например:

window.open ("url","winName","location=0,width=300,height=214");

Если winName уже открыт, он просто изменяет URL-адрес в окне. Это нормально, но если это окно находится за текущим окном, большинство пользователей не поймут это и подумают, что он просто не открывается.

Есть ли способ, что если окно уже открыто, оно выводит его на передний план?

4b9b3361

Ответ 1

Обновление. Это не сработало с Chrome (21+). Обходной путь заключается в закрытии/открытии.

Метод window.open() возвращает объект, который представляет новое окно. Вам просто нужно window.focus() it:

var w = window.open ("url","winName","location=0,width=300,height=214");
w.focus();

Или просто:

window.open("url","winName","location=0,width=300,height=214").focus();

Ответ 2

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

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

В Mozilla Firefox, в частности (в зависимости от вашей версии), есть параметр конфигурации, который включен по умолчанию, который останавливает другие окна (например, всплывающие окна) от фокусировки.

Этот параметр можно найти на странице about:config (осторожно протестируйте!)

dom.disable_window_flip: true

Если я правильно помню, этот параметр обычно назывался ~ allow_raise_or_lower_windows *

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

В результате единственное решение, которое я видел, работает, - это увидеть, существует ли окно, и оно еще не закрыто... и если оно близко, загрузите нужное окно.

function closePopupIfOpen(popupName){
  if(typeof(window[popupName]) != 'undefined' && !window[popupName].closed){
    window[popupName].close();
  }
}

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

closePopupIfOpen('fooWin');
var fooWin = window.open('someURL', 'foo', '...features...');

Конечно, недостатком является то, что если в этом окне было что-то "важное" (например, частично заполненное), оно будет потеряно.

Ответ 3

Обновление. Это не сработало с Chrome (21+). Обходной путь заключается в закрытии/открытии.

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

    setTimeout(function(){window.focus();},1000);

Ожидаем 1000 миллисекунд, чтобы окончить имя открытого окна. Вы также можете использовать этот код в открывшемся окне, например, при загрузке тела.

Ответ 4

Я исправил это, добавив

onclick="myWin = window.open('','winName','location=0,width=300,height=214'); myWin.focus()"

в элемент html (кнопка), а затем измените URL-адрес через JS.

Ответ 5

window.focus(), примененный к рассматриваемому окну, должен сделать трюк.

Ответ 6

Вы можете использовать jQuery:

myPopup = window.open(url, "Title","menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=800");
$(myPopup).focus();

Ответ 7

Закрывая окно сначала, делает трюк для меня:

window.open('', 'mypopup').close();
setTimeout(function() {
    window.open('', 'mypopup').focus();
}, 500);