iOS:在主题列表中,“返回”会跳转到错误的位置

Safari/iOS(iPhone 8,最新 iOS 版本)中的“返回”功能不可靠;从话题列表进入某个话题后,通常无法返回到话题列表中的正确位置。在我自己的论坛上,这种情况几乎总是发生。在 Meta 上,有时对我有效,但更多时候无效。无论是点击“返回”按钮还是向右滑动,都会出现此问题。

4 个赞

出于好奇,它在安全模式下能工作吗?

3 个赞

抱歉我忘了提这一点:我在自己的论坛和这里的 Meta 上都测试了安全模式,结果相同。

1 个赞

是在 iOS Hub 应用还是原生移动 Safari 中?我在 Meta 的专题列表中使用返回按钮或从左侧滑动返回时,无法复现任何问题。

您有具体的复现步骤吗?

哦,等等,我可以复现滑动返回的问题,但无法复现点击返回按钮的问题。滑动返回似乎无法记住专题列表中的实际滚动位置,但点击返回按钮总是可以记住。

4 个赞

在原生移动 Safari 中。起初我怀疑这与主题列表刷新有关,但似乎并非如此。现在在 Meta 上,这个问题对我来说 100% 会出现。

复现步骤:

  • 登录 Meta
  • 刷新 Meta 主页(此步骤似乎并非必要,但我希望排除主题列表刷新问题)
  • 向下滚动一页
  • 选择一个主题
  • 向右滑动或点击返回

我还尝试了以下操作,结果均相同:

  • 在内容拦截中禁用了 Crystal 广告拦截器。
  • 在未登录的情况下于隐私标签页中打开 Meta。
  • 在 iPhone SE 上进行测试。
  • 在 Galaxy S6 的 Chrome 浏览器中进行测试。
5 个赞

这确实在我这里可以复现 @eviltrout .. 也许我们在这里出现了回归?@j.jaffeux

6 个赞

这应该能解决问题:

详细信息在提交信息中,下周合并前会等待 Robin 的批准。感谢详细的报告 :+1:

11 个赞

已合并,请告诉我进展如何。

6 个赞

此主题已在最后回复后 3 天自动关闭,不再接受新回复。

在与 @bartv 讨论后,我进行了进一步调查,发现确实存在回归问题。

我认为问题源于:

基本上,在这种情况下,scrollOnLoad 为未定义:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/components/topic-list.js.es6#L71

我建议采用以下修复方案:

@markvanlan 能否请您下周帮忙审查?

10 个赞

@bartv 我刚合并了第二个修复,等你有空时请告诉我效果如何。

顺便一提,我在想我们是否还能进一步优化这个逻辑?目前的做法是在每次页面滚动时记录一个帖子的位置,但在移动设备上,这可能导致当你返回时,你点击的帖子不在视口内,即使它离得不远。

5 个赞

我刚刚在 Meta 上测试了一下,但对我来说不起作用——当我从某个话题点击“返回”时,会回到话题列表的顶部。

另外,我也赞同回到话题列表中的确切位置。

对我来说是有效的,有空时请录个视频。

2 个赞

我已经把它添加到我的帖子中了。希望这能帮到你,如果需要我包含其他内容,请告诉我。

1 个赞

视频显示的情况符合预期,因为你并没有执行“页面滚动”操作,即没有加载更多主题,因此未更新最后浏览主题的位置。

这正是我的侧边注释提议改进的地方。

3 个赞

啊,我可以确认,当我向下滚动足够远以强制加载新主题时,它确实有效。我没想到会有这种限制——作为用户,这有点令人困惑/不一致。

1 个赞

是的,我也不太喜欢这一点,所以我提议改进它。但据我所知,这不像我修复的其他问题那样是回归。

4 个赞

该提交确实引入了另一个回归问题,我认为这应该能解决它:

并实现我们之前讨论的行为!

6 个赞