Командный клик не открывает новую вкладку, но средний щелчок

На моем сайте, который является одностраничным JS-сайтом с использованием Sammy.js и jQuery, когда я нажимаю среднюю ссылку на мышь, ссылка открывается на новой вкладке. Но когда я нажимаю на Mac, это не так. Это происходит как в Firefox, так и в Chrome, поэтому я предполагаю, что это должно соответствовать спецификации в некотором роде.

Это происходит на Macbook Air (так что кнопка трекпада + команда). Большинство сайтов работают нормально, но при этом щелчок команды идентичен среднему клику среднего щелчка.

Попробуйте сами: https://circleci.com . Командный щелчок между «about», «home» и «contact», и вы должны столкнуться с проблемой – они не открываются на новых вкладках.

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

Win ctrl + click или команда Mac + щелчок получает «обычный» прослушиватель кликов, как щелчок с любым другим ключом-модификатором (alt + click, shift + click и т. Д.).

Это особенно сбивает с толку, так как клик Ctrl + click на Mac интерпретируется как щелчок правой кнопкой мыши по уровню ОС. С другой стороны, командный клик не интерпретируется как средний клик, а скорее предпочтение браузера.

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

if (e.metaKey || e.ctrlKey) return; 

Когда в начале обработчика добавляется e относящееся к текущему событию клика, это должно обойти все следующие e.preventDefault();

Обновить:

Это действительно работает! В этой довольно минималистической скрипке я могу распознать, когда щелкнули по клику или щелкнули по клику, чтобы избежать выполнения остальной части обработчика кликов, которая включает ajax- e.preventDefault(); содержимого и e.preventDefault(); , Это позволяет обрабатывать команды «по назначению» на Mac, т. Е. Открывать ссылку на новой вкладке.

Имея это в виду, эти строки должны теперь читать

 if (e.isDefaultPrevented() || e.metaKey || e.ctrlKey) { return; } 

Здесь есть интересная информация: https://groups.google.com/forum/#!msg/mozilla.dev.usability/H1qLTur4EFc/gXH007CAPk8J

Очевидно, что JS, который вы используете, может preventDefault() cmd + щелчок, пока средний клик не затронут. Проконсультируйтесь с документами вашей структуры JS / Site.

Вот соответствующий код от sammy.js:

 // bind to link clicks that have routes $('a').live('click.history-' + this.app.eventNamespace(), function(e) { if (e.isDefaultPrevented()) { return; } var full_path = lp.fullPath(this); if (this.hostname == window.location.hostname && app.lookupRoute('get', full_path)) { e.preventDefault(); proxy.setLocation(full_path); return false; } }); 

Резюме. Если кто-то нажимает на ссылку, переопределите стандартное поведение ссылки с поведением sammy.js, которое должно изменить текущую страницу, чтобы отобразить содержимое целевой страницы без фактической загрузки страницы. Согласно ссылке dakdad, щелчок команды (в отличие от среднего щелчка) улавливается событием click и может быть переопределен.

Для решения этой проблемы вы можете удалить обработчик событий sammy.js (используя $('a').die('click.history-' + _sammy_event_namespace_); ) и замените его модифицированной версией, которая проверяет наличие кликов и избегает переопределения их.

  • Измените курсор мыши на мышь на стиль привязки
  • Переместите курсор мыши с помощью node.js
  • Удивительный эффект CSS
  • Как создать простую вертикальную полосу прокрутки страницы без использования jQuery?
  • Самый современный метод получения позиции мыши в холсте на родном JavaScript
  • Блок прокрутки jscrollpane
  • Нужен код javascript для нажатия и удержания кнопки
  • Имитировать салфетки с помощью мыши в javascript
  • Переместить указатель мыши в определенную позицию?
  • Interesting Posts
    Давайте будем гением компьютера.