Почему CTRL-клик не открывает некоторые ссылки в новой вкладке?

18

Иногда при просмотре я щелкаю по ссылке, чтобы открыть ее на новой вкладке. Однако вместо того, чтобы открывать новую вкладку, она щелкается и просматривается на текущей вкладке, как если бы я щелкала по ней нормально, не удерживая Ctrl. Я уверен, что держу Ctrl полностью вниз и что нет ошибок в работе клавиатуры или мыши.

Время от времени открывается новая вкладка со ссылкой, но текущая вкладка также будет одновременно переходить по ссылке.

Coldblackice
источник
3
Возможно, они не являются реальными ссылками, в том смысле, что, возможно, «ссылка» использует onclickоперацию, которая может привести к путанице при нажатии Ctrl +. Можете ли вы привести конкретный пример? meta.stackoverflow.com/questions/276138/…
imtheman
@imtheman Замечательно, но это не так, по крайней мере в примерах, которые я видел. Я знаю это, потому что всегда заранее наведите указатель мыши на ссылку, чтобы убедиться, что в строке состояния отображается URL-адрес. Вот пример: nationaljournal.com/white-house/… В левом столбце / панели ссылки на другие истории выглядят как их собственные URL-адреса, что подтверждается даже переходом к их местоположению в источнике, однако нажатие ctrl не не работает, вместо этого действует, как будто Ctrl не удерживается.
Coldblackice
Если вы посмотрите на исходный код этого сайта, вы увидите это по одной из ссылок:<a class="primary" href="/superuser//congress" onclick="var x=&quot;.tl(&quot;;s_objectID=&quot;http://www.nationaljournal.com/congress_1&quot;;return this.s_oc?this.s_oc(e):true">Congress</a>
imtheman
1
Хотя у него есть hrefатрибут, он перезаписывается событием onclick.
imtheman
1
Я написал дополнение к Firefox, чтобы исправить эту проблему. github.com/danielnixon/link-fixer
Даниэльксон

Ответы:

8

JavaScript за кадром

Это происходит, когда разработчики таких веб-страниц перехватывают щелчки мыши с помощью JavaScript и выполняют асинхронные сетевые запросы внутри перехватчика, потенциально для отслеживания ваших кликов. Когда асинхронный сетевой вызов возвращается, JS выполняет программное перенаправление, используя что-то вроде:window.location.href = url;

Этот программный редирект всегда будет загружать страницу в той же вкладке, даже если вы удерживаете Ctrl( Cmdна Mac).

Используйте MiddleMouse для переопределения

Если щелкнуть среднюю кнопку мыши или выбрать «открыть в новой вкладке» в контекстном меню, полностью обойдется перехваченный код JavaScript и откроется ссылка, как если бы вообще не было кода JavaScript.

Валентин Васильев
источник
Это не совсем правильно. В то время как некоторые конструкции кода допускают альтернативный триггер, который заставляет страницу открываться в новой вкладке, другие конструкции кода препятствуют этому. Это чаще встречается на сайтах с динамическим контентом, которые не имеют типичных «страниц» и вместо этого генерируют страницы при нажатии кнопок. В этом случае на странице присутствуют не настоящие «ссылки», а кнопки, которые вызывают поведение, более похожее на приложение.
music2myear
6

Я написал дополнение к Firefox (скучно) с именем link-fixer, чтобы исправить это. Вы можете установить с addons.mozilla.org . Это требует Firefox 48.0 или позже.

Цитирую себя:

Поведение по умолчанию ctrl + click, shift + click и cmd + click при нажатии на ссылки - открыть ссылку в новой вкладке или новом окне. Такое поведение иногда нарушается неосторожными разработчиками. Это дополнение восстанавливает поведение по умолчанию, гарантируя, что ключи модификаторов всегда соблюдаются.

После установки вам больше ничего не нужно делать. Вы можете нажать Ctrl + клик по любой ссылке, и она откроется в новой вкладке. Это также поможет решить проблему, которую вы описываете во втором абзаце.

danielnixon
источник
1
Привет, Даниэль, хотя это здорово, что ты написал что-то для решения этой проблемы, можешь ли ты прочитать, как порекомендовать программное обеспечение в ответе , особенно жирным шрифтом, и обновить свой ответ, пожалуйста? Спасибо :)
bertieb
3

Возьмем эту ссылку в качестве примера:

<a href="test.php" onclick="someFunction(this); return false;">Test</a>

hrefАтрибут, в этом случае создает ссылку псевдо для удобства чтения (это также позволит ссылку на работу , даже если JavaScript отключен). Причина этого в том, что onclickатрибут всегда запускается первым. Большие сайты, такие как Google, делают это, чтобы отслеживать клики и пытаться запретить пользователю посещать вредоносные сайты. Из-за этого почему-то Ctrl+ Click не работает. Однако, если вы используете среднюю кнопку мыши, это почти всегда работает.

Я мужчина
источник
1
Пытаюсь найти среднюю мышь на Mac .
Эдуард
Я написал дополнение к Firefox, чтобы исправить эту проблему. github.com/danielnixon/link-fixer
Даниэльксон