Safari/iOS(iPhone 8,最新 iOS 版本)中的“返回”功能不可靠;从话题列表进入某个话题后,通常无法返回到话题列表中的正确位置。在我自己的论坛上,这种情况几乎总是发生。在 Meta 上,有时对我有效,但更多时候无效。无论是点击“返回”按钮还是向右滑动,都会出现此问题。
出于好奇,它在安全模式下能工作吗?
抱歉我忘了提这一点:我在自己的论坛和这里的 Meta 上都测试了安全模式,结果相同。
是在 iOS Hub 应用还是原生移动 Safari 中?我在 Meta 的专题列表中使用返回按钮或从左侧滑动返回时,无法复现任何问题。
您有具体的复现步骤吗?
哦,等等,我可以复现滑动返回的问题,但无法复现点击返回按钮的问题。滑动返回似乎无法记住专题列表中的实际滚动位置,但点击返回按钮总是可以记住。
在原生移动 Safari 中。起初我怀疑这与主题列表刷新有关,但似乎并非如此。现在在 Meta 上,这个问题对我来说 100% 会出现。
复现步骤:
- 登录 Meta
- 刷新 Meta 主页(此步骤似乎并非必要,但我希望排除主题列表刷新问题)
- 向下滚动一页
- 选择一个主题
- 向右滑动或点击返回
我还尝试了以下操作,结果均相同:
- 在内容拦截中禁用了 Crystal 广告拦截器。
- 在未登录的情况下于隐私标签页中打开 Meta。
- 在 iPhone SE 上进行测试。
- 在 Galaxy S6 的 Chrome 浏览器中进行测试。
这确实在我这里可以复现 @eviltrout .. 也许我们在这里出现了回归?@j.jaffeux?
这应该能解决问题:
详细信息在提交信息中,下周合并前会等待 Robin 的批准。感谢详细的报告 ![]()
已合并,请告诉我进展如何。
此主题已在最后回复后 3 天自动关闭,不再接受新回复。
在与 @bartv 讨论后,我进行了进一步调查,发现确实存在回归问题。
我认为问题源于:
基本上,在这种情况下,scrollOnLoad 为未定义:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/components/topic-list.js.es6#L71
我建议采用以下修复方案:
@markvanlan 能否请您下周帮忙审查?
@bartv 我刚合并了第二个修复,等你有空时请告诉我效果如何。
顺便一提,我在想我们是否还能进一步优化这个逻辑?目前的做法是在每次页面滚动时记录一个帖子的位置,但在移动设备上,这可能导致当你返回时,你点击的帖子不在视口内,即使它离得不远。
我刚刚在 Meta 上测试了一下,但对我来说不起作用——当我从某个话题点击“返回”时,会回到话题列表的顶部。
另外,我也赞同回到话题列表中的确切位置。
对我来说是有效的,有空时请录个视频。
我已经把它添加到我的帖子中了。希望这能帮到你,如果需要我包含其他内容,请告诉我。
视频显示的情况符合预期,因为你并没有执行“页面滚动”操作,即没有加载更多主题,因此未更新最后浏览主题的位置。
这正是我的侧边注释提议改进的地方。
啊,我可以确认,当我向下滚动足够远以强制加载新主题时,它确实有效。我没想到会有这种限制——作为用户,这有点令人困惑/不一致。
是的,我也不太喜欢这一点,所以我提议改进它。但据我所知,这不像我修复的其他问题那样是回归。
该提交确实引入了另一个回归问题,我认为这应该能解决它:
并实现我们之前讨论的行为!