Как открыть ссылку в новой вкладке?

Рейтинг: 2Ответов: 3Опубликовано: 15.02.2011

Пытаюсь заставить приложение открывать ссылку в новой вкладке, но ничего не получается. Согласно документации есть 4 спец. значения для открытия ссылки:

_blank - Обозначенный ссылкой документ всегда загружается во вновь открытое окно

_self - Документ загружается в этот же кадр или окно как исходный

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

_top - Загрузка документа в окно, содержащее гипертекстовую ссылку, с заменой всех кадров, отображенных в окне в данный момент

Пользуюсь методом класса Window:

Window.open(link, "_blank", "");

Но ссылка открывается только во всплывающем окне (всплывающие окна у многих юзеров вообще заблокированы). Как открыть эту ссылку в новом окне/вкладке, а не во всплывающем?

Ответы

▲ 5

Думаю, поведение при открытии ссылки с target="_blank" (или через window.open()) специфично для каждого браузера. Например, в Firefox есть галочка в настройках "Open new windows in new tabs instead", что подразумеват, что по умолчанию он открывает их в новых окнах. А вот Chrome сразу открывает их в новых вкладках.

▲ 3

Дело в том, что метод Window.open, как ни странно, действительно, должен открывать новое окно, а не вкладку. По крайней мере, это видно из его названия ;).

Ни стандарты html, ни javascript — никто ничего не знает про вкладки, поскольку это искусственное добавление со стороны браузеров. Так что всё зависит от браузера. Мне логичным видится следующее (как я понимаю, так и сделано в том же Хроме или Огнелисе): щелчок по обычному <a href=… target="_blank" … > откроет новую вкладку, а js Window.open откроет новое окно. Плюс в некоторых браузерах (в FF и в IE, насчёт остальных не знаю) есть настройка «никогда не открывать окна, всегда открывать вкладки».

Короче, мораль: этот процесс Вы контролировать никак не можете.


Вы, наверняка, удивитесь, но лучший выход из ситуации — вообще не заниматься этим бредом. Почитайте, например, $43 Ководства.

▲ 2

Всё правильно. Есть такая проблема в JavaScript безотносительно Gwt. Если использовать window.open (с параметром blank), то результат может быть разный. Если по стеку вызовов определяется, что в window.open мы пришли из обработки события (например, onclick), то во всех браузерах будет открываться новое окно/вкладка. А если у нас window.open вызывается из другого места, например, мы отправили серверу запрос и при получении ответа от сервера попытаемся открыть какой-то url, то во всех браузерах это также откроет новое окно/вкладку... кроме Хрома. В хроме откроется всплывающее окно!