Поймать событие при переходе по ссылке - PullRequest
8 голосов
/ 19 января 2012

Я пытаюсь отслеживать клики по внешней ссылке (без использования "страницы перенаправления").

Как мне захватить событие, когда пользователь переходит по ссылке, независимо от того, является ли пользователь:

  1. Левый клик по ссылке
  2. Щелкните правой кнопкой мыши ссылку и откройте ее в новом окне
  3. Используйте клавиатуру для активации ссылки
  4. Есть ли другие способы активировать ссылку?

Событие onClick относится только к первому.

Если установлено значение href="javascript:fireEventAndFollowLink()", пользователь не сможет открыть ссылку в новом окне (2), поэтому это не решение.

1 Ответ

12 голосов
/ 19 января 2012

Ссылка может быть запущена несколькими способами (при условии, что современные браузеры см. В примечании):

  1. Левый щелчок
    • Для <a target="_blank"> или <a target="_new">, страница будетбыть загруженным в новую вкладку .
    • Когда пользователь нажимает CTRL , страница будет загружена в новую вкладку .
    • Когда пользователь нажимает SHIFT , страница будет загружена в новом окне .
    • Для других значений target ссылка может быть загружена в текущий экран или другой кадр .
  2. Midde click
    • Страница будет загружена в новую вкладку, независимо отклавиш-модификаторов.
  3. Щелкните правой кнопкой мыши Этот метод невероятно сложен, если не невозможно полностью реализовать .JavaScript нельзя использовать для непосредственного определения того, какой параметр в контекстном меню выбран.
    • При выборе «Открыть ссылку в новом (вкладка, окно)» страница будет загружаться в новую вкладку, окно.
    • Если не выбрать ни одну из них, ничего не загружается
  4. Клавиатура:
    • Контекстное меню (см. 3.)
    • Введите - См. 1.

Как перехватить эти ссылки нет надежного способа перехвата всех событий ссылки.

  • Событие onmouseup можно использовать для обнаружения 1, 2 и 3.Использованную кнопку можно отслеживать с помощью свойства event.button (или event.which) .Во всех браузерах, отличных от IE, 0 = левый, 1 = средний, 2 = правый.В IE 1 = левый, 2 = средний, 4 = правый.
  • Событие onclick может использоваться для захвата 1 и 2.Ключ-модификатор может быть обнаружен через свойства event.altKey и event.shiftKey.
  • Событие oncontextmenu может использоваться для захвата 3
  • Событие onkeydown может использоваться для захвата4.

Поведение клавиш-модификаторов не формализовано ни в одной спецификации и, следовательно, зависит от браузера.По крайней мере, Firefox (как минимум 3+) и Chrome (все?) Реализуют это поведение ключа.

Смежный вопрос - Как перехватить действие над ссылкой (<a>)

...