Html открыть URL-адрес новой цели и фокуса

Я пытаюсь исправить веб-сайт.

Он открывает страницу справки в новом окне/вкладке через <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>

Это не сработало!

Ответ 1

Я думаю, что эта функция специфична для браузера, и вы не можете определить поведение для фокусировки новых вкладок или окон.

Ответ 2

Кажется, что современные браузеры не позволяют вам 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/

Ответ 3

Вместо этого вы можете использовать такой код:

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/

Ответ 4

Здесь один из способов использования 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>