公众号旧文

公众号为什么能知道你上次读到哪里了?

作者:胖子阅读 —

很多人看公众号文章时,都会遇到一个现象:

上次看一半就关掉了,过会儿再点开,页面居然能跳回上次阅读的位置。

很多人自然会觉得: 微信是不是在记录我看到了哪一段?

答案是:是的。

那你有没有想过,这是怎样做到的?

一、公众号文章其实就是一个网页

很多人可能没有意识到:

公众号文章,本质上就是一个网页。

当点开一篇文章时,手机其实是在访问一个类似这样的地址:

https
:
//mp.weixin.qq.com/s/xxxxxx

这和打开普通网站没有本质区别。

只不过这个网页是专门给微信内置浏览器看的。

而网页本身就有很多办法可以记录阅读状态。

二、网页其实能知道你滚动到了哪里

当我们在阅读文章时,其实是一直在做一件事:

不断往下滑。

网页里的 JavaScript 可以非常容易地获取到一个数据:

当前页面滚动了多少像素。

比如:

scrollTop
 =
1250
px

意思是:

已经往下滑了 1250 像素。

只要记录这个值,就可以知道:

大概看到了哪一段。

三、微信会把阅读进度保存下来

接下来就简单了。

当关闭文章或者离开页面时,网页可以把这个数据保存起来。

常见的方法有几种:

1.本地存储(LocalStorage)

网页可以在手机里保存一点数据,例如:

article_id
 = xxx
scroll
 =
1250

下次再打开同一篇文章时,网页只要读取这个值,然后自动滚动到对应位置。

2.服务器记录

也可能是另一种方式:

当我阅读文章时,网页会悄悄发送一个请求给服务器,例如:

用户ID
文章ID
阅读进度

服务器就能知道看到了哪一段。

下次再打开时,服务器把这个数据返回给网页。

四、为什么只有公众号能做到?

有人会问:

为什么普通网页很少有这个功能,而公众号却很常见?

原因其实很简单:

微信控制了整个环境。

普通网站很难知道:

  • 这个用户是谁
  • 他是不是同一个人
  • 他是不是换了设备

但公众号是在微信内部打开的。

微信天然就知道:

  • 用户ID
  • 微信账号
  • 阅读记录

所以实现起来就非常容易。

五、为什么有时候又记不住?

如果你注意观察,会发现这个功能有时候会失效。

比如:

  • 清理缓存
  • 换手机
  • 换浏览器
  • 文章被修改

这通常是因为:

本地存储的数据没了。

或者:

服务器记录的进度失效了。

所以页面就只能从头开始。

六、其实很多网站也有类似功能

公众号并不是唯一会这么做的。

很多大型网站也有类似设计,比如:

  • 长篇新闻网站
  • 电子书网站
  • 论坛帖子

原理其实都是一样的:

记录滚动位置,然后恢复滚动位置。

七、看起来像记忆,其实只是一个数字

从技术角度看,这件事非常简单。

公众号并没有真的记住你读到了哪里。

它只是记录了一个数字:

页面滚动了多少像素。

下次打开时,再把页面滚回去而已。