Выпадающее меню для цитирования текста не отвечает на Android

В настоящее время я не могу выделять и цитировать текст на Android. Это наблюдается уже некоторое время. Что я упускаю? (Android 16 и 17, Chrome)

4 лайка

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

1 лайк

Предполагаю, что следующее не помогает?

  1. Перезагрузка
  2. Попробуйте отреагировать на пост, пока не появится всплывающее окно с реакциями, а затем попробуйте выделить текст
4 лайка

Вау. Это помогло! Что за… Это самый странный обходной путь, с которым я когда-либо сталкивался! Спасибо!

3 лайка

Да, такое уже случалось со мной, и этот метод всегда помогал это исправить.

Интересно, связано ли это с устаревшими данными в localStorage? Очень интересно.

Хм. Я всегда думал, что это как-то связано с состояниями. Например, принудительное отображение всплывающего окна с реакциями заставит состояние наведения снова активироваться. Но это лишь предположение.

Случилось снова.

И обходной путь сработал снова.

Классифицирую это как Contribute > Bug

1 лайк

Диагностика ИИ (GPT 5.6 Sol Ultra) в Codex (если полезно):

Нашёл: Discourse Reactions утекает глобальное состояние «без выделения текста».

  • Событие touchstart реакции добавляет discourse-reactions-no-select к в plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222.
  • Этот класс применяет user-select: none и отключает длинное нажатие WebKit для всего документа в plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1.
  • Если вертикальная прокрутка начинается над кнопкой реакции, plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:249 инвалидирует жест, не удаляя класс.
  • plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257 затем возвращает управление досрочно, оставляя класс навсегда.
  • Также отсутствует очистка при touchcancel или уничтожении компонента.

Единственное удаление находится в plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:690. Это объясняет описанный обходной путь (The popup menu for quoting text is unresponsive on Android): открытие и закрытие всплывающего окна реакций вызывает collapseAllPanels(), восстанавливая выделение.

Самая панель цитирования находится ниже по потоку — она слушает selectionchange и требует реального выделения браузера в frontend/discourse/app/components/post-text-selection.gjs:58. При глобальном user-select: none Android никогда не создаёт это выделение.

История подтверждает эту семью багов: исправление прокрутки 2023 года (FIX: prevents triggering a reaction while scrolling (#224) · discourse/discourse-reactions@d1970cf · GitHub) ввело досрочный возврат при невалидном касании, а частичное исправление 2024 года (FIX: couldn't select text after dismissing a reaction (#296) · discourse/discourse-reactions@c6710ef · GitHub) перенесло очистку в сворачивание панели, но оставило пути прокрутки/отмены неохваченными.

Исправление должно очищать класс при каждом завершённом, отклонённом, отменённом или уничтоженном касании, с регрессионными тестами для touchstart → touchmove → touchend и touchcancel.

3 лайка

Эта ошибка меня давно бесила, рад, что ты нашёл решение :+1:

3 лайка

@davidb для вашего внимания

1 лайк

Привет, @merefield! Я пытаюсь выяснить, связано ли это с другим исправлением, которое я выпустил несколько недель назад. Оно должно было затрагивать только iOS, поэтому мне интересно, что именно подразумевается под «некоторым временем»? Речь идет о нескольких неделях или большем сроке?

1 лайк

Чёрт, извините, я не могу точно вспомнить, но, по моим ощущениям, прошло как минимум несколько недель, хотя я и не уверен на сто процентов.

Я довольно уверен, что эта проблема возникала в Android 16, то есть до выхода Pixel.

В любом случае, конечно, эта проблема может быть не ограничена только Android…

1 лайк

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

2 лайка

Спасибо, что посмотрели!

1 лайк

У меня эта проблема наблюдается в Chrome на Android уже несколько месяцев на одном сайте, если я правильно помню. (Хотя я тоже не вел точный учет, пока второй сайт, которым я пользуюсь, не обновился два дня назад)

2 лайка