Определить при щелчке, предназначена ли нажатая ссылка для открытия нового окна или вкладки - PullRequest
6 голосов
/ 01 декабря 2011

Большинство современных браузеров поддерживают команды ctrl+click или command+click или аналогичные для открытия ссылок на новой вкладке или в новом окне.

В приложении я хочу, чтобы при нажатии ссылка отключалась.Но только если целью является то же самое окно (например, если оно открывается на новой вкладке, я не хочу, чтобы ссылка стала отключенной, поскольку разумно щелкнуть по ней еще раз).

Iсделал несколько попыток и отладил объект события, который создается по щелчку - но я не могу найти никакой информации о том, является ли цель новой вкладкой или новым окном.

Известный обходной путь: Конечно, можно проверить, является ли цельопределенная клавиша была нажата при нажатии на конкретную ссылку, что легко - но поскольку эти команды различаются от браузера к браузеру и от ОС к ОС, нужно будет определить сложное сопоставление и узнать, кто именно настроил пользователя и т. д..

Есть ли надежный способ определить, следует ли открывать местоположение в новой вкладке или окне?

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Вот вам рабочий пример: http://jsfiddle.net/pioul/eCuNU/4/

Этот скрипт разрешит переход по ссылке только в том случае, если ссылка будет открываться в новой вкладке / окне на основе атрибута target="_blank".

HTML:

<a href="http://google.fr" target="_blank">new window</a>
<a href="http://google.fr" target="_self">same window 1</a>
<a href="http://google.fr" target="">same window 2</a>

JQuery:

$("a").bind("click", function(e){
    if($(this).attr("target") != "_blank"){
        e.preventDefault();
    }
});

EDIT:

Вы можете учитывать Ctrl + клики, как это:

$("a").bind("click", function(e){
    if($(this).attr("target") != "_blank"){
        if(!e.ctrlKey){
            e.preventDefault();
        }
    }
});
0 голосов
/ 01 декабря 2011

Вы не можете запретить браузеру открывать ссылку в новой вкладке или окне. Там могут быть (необнаруживаемые) параметры конфигурации, которые вызывают это или думают о жестах мыши: щелчок правой кнопкой мыши и перемещение вниз откроет новую вкладку в Opera, и я думаю, что это невозможно обнаружить.

Кроме того, принуждение браузера открывать вкладку в новом окне (target="_blank" или даже window.open) считается плохим стилем. Вы должны позволить пользователю выбирать, что он хочет сделать. Если вы действительно хотите это сделать, вы также можете рассмотреть window.onunload, который должен работать чаще всего.

0 голосов
/ 01 декабря 2011

Иногда в настройках браузера устанавливается открытие ссылок на новой вкладке или в том же окне.

Вы можете проверить целевой атрибут объекта ссылки.

<a href="http://your_link_to_page" target="_blank" >This open in new window</a>

Используйте JavaScript, чтобы манипулировать тегами привязки при загрузке страницы и проверять целевые атрибуты.Если целевое значение установлено на _blank, то включите их или вы можете выполнить эту проверку, когда пользователь щелкает ссылку.

Вы можете использовать механизм, чтобы найти нажатие клавиши CTRL при нажатии на ссылку.Есть некоторые ресурсы, такие как this .Вы можете создать систему.

ПРИМЕЧАНИЕ: если вы используете JQuery, используйте разные классы для классификации ссылок, которые необходимо проверить.И отключите их в состоянии готовности или во время щелчка по ссылкам.

...