Открыть ссылку в новом окне или сфокусироваться на ней, если она уже открыта
У меня есть ссылка, которая должна открываться на новой вкладке, но если вкладка уже открыта, просто переключитесь на нее.
Я пробовал использовать 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: мне нужно открыть ссылку на новой вкладке, а не в отдельном окне.
Ответы
Ответ 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() не соответствовало моим потребностям, как это другое.