Функция «Открывать все внешние ссылки в новой вкладке» не работает при выделении текста

  1. Убедитесь, что в разделе /my/preferences/interface в Других настройках интерфейса отмечена опция Открывать все внешние ссылки в новой вкладке (это, кажется, настройка по умолчанию)
  2. Найдите любой пост со внешней ссылкой — случайные примеры в meta и в try
  3. Нажмите на первую внешнюю ссылку, которую вы найдете в этом посте (желательно ту же самую)

Она открывается в новой вкладке, отлично. :+1:

НО:

  1. Убедитесь, что в разделе /my/preferences/interface в Других настройках интерфейса отмечена опция Открывать все внешние ссылки в новой вкладке (это, кажется, настройка по умолчанию)
  2. Откройте тот же пост, что и в предыдущем тесте
  3. Выделите любой текст в этом посте (1+ буква, 1+ слово, подойдет любое выделение) — вы должны увидеть плавающую кнопку Цитата
  4. Нажмите на первую внешнюю ссылку, которую вы найдете в этом посте

:no_entry: :see_no_evil: :warning: Теперь внешняя ссылка открывается в текущей вкладке, а не в новой. :warning: :see_no_evil: :no_entry:


:information_source: На самом деле вы можете просто попробовать это на этом посте:

  1. Нажмите на ЭТУ ВНЕШНЮЮ ССЫЛКУ — ОК, отлично :+1: новая вкладка
  2. Выделите ЭТОТ ТЕКСТ
  3. Нажмите на внешнюю ссылку из шага 1 снова — NG :no_entry: текущая вкладка
4 лайка

Я могу это подтвердить. Не уверен, что это стоит исправлять, так как это похоже на пограничный случай, когда пользователь сам напрашивается на неприятности.

1 лайк

Потому что вы думаете, что это может быть сложно исправить?

Я часто кликаю. Я часто выделяю текст.
Поэтому это меня очень часто раздражает.

Я упоминал об этой ошибке давно, но на этот раз объяснил её лучше. :wink:

Это действительно неприятно.

Если у вас нет навыков для отправки PR (я, думаю, их тоже не имею), то просто использование Ctrl+клик для открытия в новой вкладке сработает. Это не сложно автоматизировать и это решит проблему на любом сайте, даже на тех, которые не открывают ссылки в новых вкладках.

1 лайк

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

Но на самом деле эта опция делает Открывать случайные внешние ссылки в новой вкладке.

Мне потребовались месяцы, если не годы, чтобы выявить схему воспроизведения.
Мне это казалось действительно случайным.

Может быть, стоит убрать эту опцию для обеспечения последовательного поведения?

Я помню, как пытался настроить среду разработки Discourse для простого PR с исправлением CSS.
Но, если я правильно помню, я сдался, потому что мой ПК был слишком старым, и я не мог установить или запустить все необходимые требования.

1 лайк

Я нашел свою предыдущую неудачную попытку установки среды разработки Discourse.
Мой старый домашний ПК на Linux был слишком устаревшим, а на моем рабочем ноутбуке с Windows не было включено гиперпоточность.

Теперь мой новый рабочий ноутбук, похоже, поддерживает гиперпоточность*, поэтому я попробую следовать новым инструкциям без прав администратора.

* Команда wmic CPU Get NumberOfCores,NumberOfLogicalProcessors показывает больше логических ядер, чем физических.

Привет,

Думаю, это можно исправить с помощью CSS.

.cooked a {
  @include user-select(text);
}

Надеюсь, это поможет. Я пока не тестировал это thoroughly, но кажется, что работает нормально. :slightly_smiling_face:

Редактирование: user-select: text нужно добавить к ссылке, потому что на это влияет не только выделенный текст внутри .cooked, но и любой выделенный текст на сайте. Я изменил код.

6 лайков

Для меня это выглядит как магия. Я бы хотел узнать, как это работает, не могли бы вы объяснить этот фокус? :hugs:

2 лайка

Отличная работа по расследованию, Дон! Хочешь отправить pull request?

6 лайков

Спасибо, Сэм. Я просто более внимательно проверяю это перед отправкой, и, к сожалению, этого оказывается недостаточно. Это решение работает только в Chrome.

5 лайков

Вот фрагмент кода, вызывающий ошибку (из app/assets/javascripts/discourse/app/lib/click-track.js)

    // Отменить клик, если он сработал как часть выделения.
    const selection = window.getSelection();
    if (selection.type === "Range" || selection.rangeCount > 0) {
      if (selectedText() !== "") {
        return true;
      }
    }

Удаление этого кода решает проблему и, похоже, не ломает тесты (у меня некоторые тесты падают и до, и после изменения по какой-то причине, но новых, видимо, не появляется).
Поэтому я задаюсь вопросом, выполняет ли этот код какую-либо полезную функцию, потому что одно точно: он не делает то, о чём заявлено. Иначе заявитель об ошибке вообще не мог бы переходить по ссылкам при «выделении + клике», но это не его жалоба.
Может, кто-нибудь объяснит, что этот код должен был accomplishing?

1 лайк

Возможно, это сделано для того, чтобы предотвратить открытие ссылок в новых вкладках при простом выделении текста для цитирования?

Когда найденный вами код отключен и включена опция «Открывать все внешние ссылки в новой вкладке»,

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

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

Выделение должно всегда работать только как выделение, не открывая ссылки.

Да, такие выделения работают как ожидалось: без перехода по ссылкам или открытия их в новых вкладках.

1 лайк

Я смутно помню, что существовал обходной путь для конкретного браузера. Может, попробовать в Safari, Firefox или Chrome, выделив текст, чтобы проверить, сработает ли что-то?

1 лайк

Работает в Firefox и Chrome. Как мне попробовать Safari на Ubuntu?

1 лайк

Доступен ли ваш сервер разработки в вашей Wi-Fi сети, чтобы вы могли также протестировать его со своего смартфона?

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

Вы можете добавить этот браузер для смартфона (Firefox, на базе Chromium или Safari) в свой список протестированных браузеров. :smiling_face_with_sunglasses:

Кстати, огромное спасибо за вашу работу над этой ошибкой!!

Я нашел вот такую причину для этого кода отмены, по-видимому:

Предотвратить клик, если пользователь выделяет содержимое в теме и отпускает кнопку мыши над ссылкой.

https://meta.discourse.org/t/selecting-a-link-results-in-it-being-opened/14846
[удалённая тема]

Интересный комментарий:

У меня есть доступ только к платформе Windows для тестирования.

Эту правку можно легко протестировать, так как файл можно вставить целиком прямо в консоль.

@sam, ты знаешь, какой файл нужно вставить в консоль после загрузки страницы темы?
@Aleksey_Bogdanov мог бы предоставить этот файл, и я вставлю его в консоли своих браузеров Vivaldi, Firefox под Windows и Kiwi под Android 9, а ты вставишь его в свои браузеры Safari под iOS и macOS.

Я не думаю, что сейчас всё работает так же.

1 лайк

В Chrome и Firefox на Android проблем не обнаружено, хотя в Firefox у меня возникают трудности с выбором, как ни старайся.

1 лайк

До вашего изменения было то же самое, верно?