Ответ 1
Я думаю, что эта функция специфична для браузера, и вы не можете определить поведение для фокусировки новых вкладок или окон.
Я пытаюсь исправить веб-сайт.
Он открывает страницу справки в новом окне/вкладке через <a href="..." target="help">
(ни один другой фрейм не имеет этого имени)
Это хорошо работает при первом открытии нового окна/вкладки для справки. Но при последующих щелчках окно/вкладка загружается, но остается скрытым.
Я пробовал это:
<script>
function OpenAndFocusHelp() {
win=window.open('help/1000CH00017.htm','help');
win.focus();
}
</script>
<a href="help.html" target="help"
onclick="OpenAndFocusHelp()">Help</a>
Это не сработало!
Я думаю, что эта функция специфична для браузера, и вы не можете определить поведение для фокусировки новых вкладок или окон.
Кажется, что современные браузеры не позволяют вам window.focus
существующее окно. Или, по крайней мере, это не придаст этому фокусу окна. (IE9 на самом деле будет моргать вкладку, но большинство других браузеров просто загружают ее, но не указывают, что внимание пользователя следует обратить на новое окно.)
Следовательно, одно из решений, которое представляет собой, заключается в том, чтобы закрыть окно сначала, а затем снова открыть его сразу же после. Например, объявить следующую функцию:
window.openOrFocus = function(url, name) {
if (!window.popups)
window.popups = {};
if (window.popups[name])
window.popups[name].close();
window.popups[name] = window.open(url, name);
}
Теперь вы можете написать HTML, например:
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/k3t6x/2/', 'window1')">Window 1</a><br />
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/KR6w3/1/', 'window2')">Window 2</a><br />
Так как он сначала закрывает окно, он надежно дает фокус только что созданному дочернему окну.
В этом решении также используется пространство имен window.popups
, поэтому переименуйте его использование в примере javascript, если у вас есть функция с именем popups
или иначе столкнулись с ней.
Предостережение. Это не работает после обратной связи. Это связано с тем, что, когда вы переходите от текущей страницы, он больше не является владельцем дочерних окон. Поэтому он больше не может их закрывать. Однако он просто ухудшает обычное (нефокусирующее) поведение использования атрибута target
.
Протестировано в: Firefox 4, Chrome 11, IE 9
JsFiddle Demo: http://jsfiddle.net/aqxBy/7/
Вместо этого вы можете использовать такой код:
var _arrAllWindows = new Array();
function OpenOrFocus(oLink, sTarget) {
var oWindow = _arrAllWindows[sTarget];
if (!oWindow || oWindow.closed) {
oWindow = window.open(oLink.href, sTarget);
_arrAllWindows[sTarget] = oWindow;
}
oWindow.focus();
return false;
}
Затем, чтобы вызвать его, введите такую ссылку:
<a href="http://www.google.com" onclick="return OpenOrFocus(this, 'help');">Open</a>
Прекрасно работает в Chrome и IE, к сожалению Firefox отключает по умолчанию возможность "поднять" окна в коде, поэтому focus()
не действует в этом браузере - не удалось найти работу.
Тестовая версия доступна здесь: http://jsfiddle.net/yahavbr/eVxJX/
Здесь один из способов использования jQuery и HTML5 с резервным копированием для отключенных JavaScript клиентов. Он будет перезагружать страницы при каждом нажатии. Протестировано и работает в Firefox и Chrome.
<script>
$(document).ready(function() {
$('a[data-popup]').click(function(event) {
event.preventDefault();
window.open(this.href, this.dataset['popup'], 'resizable,scrollbars').focus();
});
});
</script>
<a href="#" onclick="location.href='https://stackoverflow.com/'; return false;" target="_blank" data-popup="stackoverflow">Stack Overflow</a>
<a href="#" onclick="location.href='https://superuser.com/'; return false;" target="_blank" data-popup="superuser">Super User</a>
<a href="#" onclick="location.href='https://serverfault.com/'; return false;" target="_blank" data-popup="serverfault">Server Fault</a>