2015-12-03 2 views
0

На некоторых веб-сайтах вы можете щелкнуть правой кнопкой мыши по ссылке и выбрать «открыть на новой вкладке», и она отлично работает, но не если вы используете среднюю кнопку мыши, Сделай так. Я встречал это несколько раз, это не слишком раздражает, но мне все еще любопытно, что вызывает такое поведение. (О ХАУ) Вот сайт, который ведет этот путь просмотра с Chrome 46: теги ссылка http://ebookfriendly.com/free-public-domain-books-sources/ HTML, выглядит нормально:javascript предотвращает среднюю кнопку мыши от открытия ссылки в новой вкладке

<a title="Feedbooks" href="http://www.feedbooks.com/">⇢ Feedbooks</a>

Причина должна быть что-то в JavaScript , Любые указатели?

ответ

1

Кажется, что эта ссылка имеет прослушиватель событий, который использует preventDefault() и открывает страницу другими способами.

Edit: Трудно сказать, почему именно они делают это, но когда я смотрю на весь обработчик, кажется, что ссылка передается в Google Analytics:

function(e) { 
    var n = this.getAttribute("href"), 
     i = "string" == typeof this.getAttribute("target") ? this.getAttribute("target") : ""; 
    ga("send", "event", "outbound", "click", n, { 
     hitCallback: t(n, i) 
    }, { 
     nonInteraction: 1 
    }), e.preventDefault() 
} 
+0

Спасибо за быстрый ответ. Как «frontend_dev» вы можете сказать мне какую-либо причину этой практики? –

+0

См. Мой пересмотренный ответ выше. Так что это похоже на Google Analytics. –

+0

Ответ здесь поможет вам, просто убедитесь, что вы получаете доступ к ключевому коду средней кнопки мыши и делаете оператор, чтобы проверить, не является ли эта кнопка (я думаю, ее 2), иначе вы предотвратите все события кликов по ссылке/ссылкам на всех – TrojanMorse

1

Вы можете спросить, какая кнопка вызвала события и предотвратить поведение по умолчанию.

document.querySelector("a").addEventListener("click", function(e) { 
    if (e.which === 2) { 
     e.preventDefault(); 
    } 
}, false); 
+0

Хороший ответ, я только что сделал комментарий о проверке правильного кодового ключа в принятом ответе. +1 – TrojanMorse

+0

Итак, если ожидаемое поведение предотвращено функцией preventDefault(), связь все равно будет открыта, потому что есть функция прослушивания события mouseup, я предполагаю? –

+0

Ссылка не открывается, если вы используете среднюю мышь, в других случаях браузер будет вести себя так, как ожидалось. – Sagi

0
$(document).mousedown(function(e){ 
     if(e.which == 2){ 
      e.preventDefault(); 
      alert("middle click"); 
      return false; 
     } 
    }); 

работает только если держать предупреждение()

Смежные вопросы