jQuery: обработчик кликов не вызывается, когда ссылка открывается в новой вкладке / окне

Я заметил, что когда пользователь нажимает ссылку, скажем, средней кнопкой или кнопкой shift / ctrl + left, обработчик кликов, прикрепленный к гиперссылке, не вызывается.

Я видел решения для отслеживания события mousedown, но мне бы хотелось отслеживать точное событие перехода по ссылке.

Есть какие-нибудь предложения? Спасибо


person glaz666    schedule 05.04.2010    source источник


Ответы (4)


_1 _ / _ 2_ - это действительно единственный способ получить уведомление о взаимодействии со средней кнопкой, поэтому обнаружение события «вниз, затем вверх» без вмешательства mouseout - это более или менее лучшее, что вы можете сделать. Это не очень хорошо.

Я бы не стал беспокоиться, поскольку даже если вы поймали эту единственную возможность, вы не сможете уловить множество других взаимодействий. Помимо среднего щелчка (который может быть не «Открыть в новой вкладке» во всех браузерах / конфигурациях; например, в IE6 это будет пользователь, включающий режим прокрутки), пользователь может щелкнуть правой кнопкой мыши и «Открыть в новом» window ', или перетащите ссылку в адресную строку или новую вкладку, или различные другие действия, специфичные для браузера, для выполнения навигации.

person bobince    schedule 05.04.2010
comment
это моя точка зрения. Я хочу отслеживать навигацию, независимо от того, как она достигается. - person glaz666; 05.04.2010
comment
Прости! Не может быть сделано. Атрибут HTML5 <a ping> может в будущем позволить вам обнаруживать отслеживаемую ссылку на стороне сервера без необходимости выполнять перенаправление, как в ответе Ли, но вы просто не получаете доступ к сценарию ко многим различным типам навигации, возможным из интерфейс браузера. - person bobince; 06.04.2010

Если ссылка находится на вашем сайте, отслеживайте ее при загрузке страницы, а не на странице, на которой они получили ссылку. Если ссылка ведет на другой сайт, вам необходимо использовать URL-адрес перенаправления, чтобы ваш сайт мог его отслеживать (пример: http://yoursite.com/redirect.html?redirect=http://othersite.com).

На странице перенаправления вы можете сделать что-то вроде этого (если хотите использовать JavaScript):

$(document).ready(function(){
  //insert your tracking code here...

  var redirect = getParameterByName('redirect');
  if(redirect != ''){
    window.location = redirect;
  }
});

// From https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144
function getParameterByName( name ){
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null )
    return "";
    else
    return results[1];
}
person Lee    schedule 05.04.2010
comment
Это возможное решение, но не в моем случае, так как я хочу проверить удобство использования, выяснив, какие элементы управления используются на сайте. - person glaz666; 06.04.2010
comment
Возможно, вам стоит перефразировать свой вопрос. я бы хотел отслеживать точное событие перехода по ссылке. Если кто-то щелкает правой кнопкой мыши, невозможно узнать, какое действие он выполнил, но вы можете определить, перешли ли они по ссылке, сделав ссылки уникальными и отслеживая их в месте назначения. Конечный результат должен быть таким же. - person Lee; 06.04.2010

вы можете использовать события 'mousedown' 'mouseup' в сочетании с «event.which».

пример: http://jsbin.com/ikahe/edit

person jAndy    schedule 05.04.2010
comment
Я вижу то, что возвращает 1, 2, 3, но как насчет 2-х кнопочной мыши или Mac? :) - person glaz666; 05.04.2010
comment
Я не уверен на 100%, но jQuery должен давать одинаковые результаты в разных браузерах или ОС, 1 = слева, 2 = посередине, 3 = справа - person jAndy; 05.04.2010
comment
См. Подробности в quirksmode.org/js/events_properties.html#button на which и button. - person bobince; 05.04.2010

Как сделать клик-угон вправо ... а точнее влево.

https://web.archive.org/web/20160305021055/http://mislav.net/2011/03/click-hijack/

person doublejosh    schedule 20.11.2011