在新版本的chrome(本PR的实测环境为win10 x64 + chrome 84.0.4147.105 x64)中,访问帖子列表页时会出现奇怪的现象:点击列表页末尾的长条形下一页按钮,加载的内容插入时,整个页面向上移动了(看上去像是插入在了按钮的上面)。在之前版本的chrome和其他浏览器当中并不是这样的。

复现步骤:

  1. 准备一个Discuz x3.4或者x3.5,进入帖子列表页(forum-x-1.html这种的),并确保列表页至少能翻3页及以上
  2. 使用最新的稳定版chrome(我用的是win10 x64 + chrome 84.0.4147.105 x64)
  3. 滚动到页面最底端,点击那个最长的“下一页”按钮
    实测问题可以稳定复现,在多个使用默认模板的站点均可复现。

这个行为本身倒不会产生错误的页面,但是对用户使用的体验影响是很大的,用户需要滚动回上面才能接着之前的进度继续向下看,更麻烦的是用户还得找到上一次看的结尾在哪里,显然太不方便了,还是原有的向下插入内容的行为更适合使用。但问题在于这个行为并非受js控制,而是浏览器自己搞出来的。
通过对浏览器行为的观察和分析,可以大致推测这个行为很可能是浏览器新加入的某种智能判断机制,当用户点击某个按钮导致页面长度变化的时候,不再一味的让页面向下移动。根据分析几种不同情况下的页面移动情况,猜测浏览器很可能是想要在点击触发页面改变的时候,保持用户点击的按钮位置不变。
按照上述分析对加载过程的代码进行了修改,在内容插入的时候去掉用户点击的按钮,并在按钮符合继续存在的条件的情况下再重新加延时添加回来。实测问题得到解决。