我目前无法在 Android 设备上高亮并引用文本。这种情况已经持续了一段时间。我是不是漏掉了什么?(Android 16 和 17,Chrome 浏览器)
我偶尔会遇到这个问题。无法高亮文本。目前看来似乎已经恢复正常了。
我假设以下方法没有帮助?
- 重新加载
- 尝试对帖子进行反应,直到看到反应弹出窗口,然后尝试高亮文本
哇。这居然修好了! 什么鬼……这是我见过的最奇怪的变通方法了!谢谢!
没错,我以前也遇到过这种情况,而且这个方法总是能解决问题。
我在想这是否与某些过期的 localStorage 有关?非常有趣。
嗯。我一直认为这与状态有关。比如强制显示反应弹出窗口会强制将悬停状态重新激活。但这只是推测。
刚刚又发生了。\n\n而且之前的变通方法再次奏效。\n\n打算将此归类为 Contribute > Bug
AI (GPT 5.6 Sol Ultra) 在 Codex 中的诊断(如有用):
找到了:Discourse Reactions 泄漏了一个全局的“禁止文本选择”状态。
- 在
plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222中,Reaction 的 touchstart 事件会向<html>添加discourse-reactions-no-select类。 - 该类在
plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1中应用了user-select: none,并禁用了整个文档中 WebKit 的长按呼出菜单。 - 如果垂直滚动从 Reaction 按钮上方开始,
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。这解释了报告中提到的变通方法(https://meta.discourse.org/t/the-popup-menu-for-quoting-text-is-unresponsive-on-android/407332):打开并关闭 Reaction 弹出窗口会调用 collapseAllPanels(),从而恢复选择功能。
引用工具栏本身处于下游——它监听 selectionchange 事件,并在 frontend/discourse/app/components/post-text-selection.gjs:58 中需要真实的浏览器选择。由于全局设置了 user-select: none,Android 浏览器永远不会创建该选择。
历史记录证实了这一类 Bug:2023 年的一项滚动修复(https://github.com/discourse/discourse-reactions/commit/d1970cf750e82a3035e05ddc3d52733a5c76a6ab)引入了无效触摸的提前返回逻辑,而 2024 年的一项部分修复(https://github.com/discourse/discourse-reactions/commit/c6710ef909481fd2fc16c10405f3daa92b6481fc)将清理逻辑移至面板折叠时,但遗漏了滚动和取消路径。
修复方案应在每个已完成、被拒绝、被取消或销毁的触摸生命周期中清除该类,并为 touchstart → touchmove → touchend 和 touchcancel 添加回归测试。
这个bug困扰我一段时间了,很高兴你找到了解决方法 ![]()
@davidb 供您关注
你好 @merefield,我正在尝试确认这是否与我几周前发布的另一个修复有关。该问题应该仅限于 iOS 平台,所以我很好奇,“一段时间”具体是指多久?是几周还是更久?
天哪,抱歉我记不太清了,但我的直觉是至少有几周,虽然我不太确定。
我相当确定这是在 Android 16 下出现的问题,也就是在 Pixel 推送之前。
当然,这种情况可能不仅仅局限于 Android …
别担心,我会在本地做一些测试,不应用这些更改,看看是否是我的 iOS 修复导致了这个问题。如果是的话,我今天发布的补丁可能会有帮助,但我会先进行验证。
感谢您查看!