jQuery: обработчик кликов не вызывается при открытии ссылки в новой вкладке / окне - PullRequest
4 голосов
/ 05 апреля 2010

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

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

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

Ответы [ 4 ]

3 голосов
/ 05 апреля 2010

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

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

2 голосов
/ 05 апреля 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 http://stackoverflow.com/questions/901115/get-querystring-with-jquery/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];
}
1 голос
/ 05 апреля 2010

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

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

0 голосов
/ 21 ноября 2011

Как сделать, чтобы захватить клик вправо ... или, вернее, влево.

http://mislav.uniqpath.com/2011/03/click-hijack/

...