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

Открыть ссылку в новом окне или сфокусироваться на ней, если она уже открыта

У меня есть ссылка, которая должна открываться на новой вкладке, но если вкладка уже открыта, просто переключитесь на нее. Я пробовал использовать javascript, wnd = window.open() и wnd.focus(), который работает в Chrome 19, но не в FF 13 или IE 9. Вот код, который я написал:

<script type="text/javascript">
var loadingTableWnd;
function openOrSwitchToWindow(url){
if(loadingTableWnd == undefined)
loadingTableWnd = window.open(url,'myFrame');
else
loadingTableWnd.focus();
}
</script> 
<a href='javascript:openOrSwitchToWindow("/");' >Loading Table</a>

Любая идея, как я могу открыть или переключиться с каждого браузера?

EDIT: мне нужно открыть ссылку на новой вкладке, а не в отдельном окне.

4b9b3361

Ответ 1

Различные браузеры ведут себя по-разному для window.open() и focus(). Для этого кода window.open('www.sample.com','mywindow').focus()

  • Chrome 20 открывает новую вкладку и фокусируется на последующих вызовах open() независимо от того, вызвана ли функция focus().
  • Firefox 13 открывает новую вкладку, фокусируется на первом открытии(), не фокусируется на последующих вызовах open()/игнорирует focus().
  • IE 8 открывает новое окно с отличием focus().
  • Safari 5 открывает новое окно и фокусируется на последующих вызовах open() независимо от того, вызвана ли функция focus().

Попробуйте протестировать: http://jsfiddle.net/jaraics/pEG3j/

Ответ 2

Вам не нужна никакая логика для чего-то подобного. По умолчанию второй параметр для window.open() дает окну "имя", которое браузер помнит. Если вы попытаетесь вызвать window.open() с тем же именем (после того, как оно уже открыто), оно не откроет новое окно... но вам все равно придется называть .focus() на нем. Попробуйте следующее:

var a = window.open(url, "name");
a.focus();

Те должны быть единственными строками кода в вашей функции, и вам не нужна переменная loadingTableWnd...

Ответ 3

Если окно уже открыто и если вы хотите сфокусироваться на этом окне, вы можете использовать

window.open('', 'NameOfTheOpenedWindow').focus();

Ответ 4

Если вы не заинтересованы в сохранении состояния ранее открытой вкладки, вы можете сделать это:

var loadingTableWnd;
function openOrSwitchToWindow(url) {
    if (loadingTableWnd != undefined) {
        loadingTableWnd.close();
    }
    loadingTableWnd = window.open(url,'myFrame');
}

Ответ 5

window.focus() широко поддерживается и, кажется, работает нормально как в Internet Explorer, так и в Firefox, проблема должна быть в вашем коде. Я создал простой jsFiddle для вас, чтобы проверить.

Ответ 6

В Firefox 66 и Chrome 74 это работает для меня:

 wnd = window.wnd && window.wnd.close() || window.open(url, "wnd");

Не проверено в других браузерах. Спасибо Роберто (в комментарии ответа MarkZ), чтобы указать мне на это решение. (Я не мог добавить комментарий в этом ответе из-за моей нехватки репутации, извините).

Решение window.focus() не соответствовало моим потребностям, как это другое.