在 LINUX DO 列表页点击标题即可弹窗预览整帖,楼中楼展示、点赞、回复、收藏、Boost、原图灯箱一应俱全;支持智能定位(首次从头、已读跳未读、通知直达指定楼层),按需双向分片加载,向上翻时零跳动,底部固定工具栏,并按真实阅读节奏上报已读进度——无需离开列表页,也无需反复返回。
LINUX DO 基于 Discourse 构建。本脚本利用 Discourse 官方 JSON 接口,在话题列表页拦截标题点击,以弹窗形式直接预览帖子内容,避免频繁跳转与"返回即刷新、丢失浏览位置"的困扰。弹窗内支持智能定位(首次打开从头开始、已读过的帖子自动跳到"已读跳未读"位置、从通知/用户菜单点击则直达对应楼层),按需双向分片加载评论,滚动到顶部/底部自动续加载且不会跳动。所有交互(点赞、回复、收藏、Boost、已读)均通过官方接口完成,沿用浏览器现有登录态。
last_read_post_number + 1);从通知/用户菜单点击则直达对应楼层。IntersectionObserver 自动续加载,向上翻页时不会引起页面跳动;到底后展示"已加载全部评论"提示。a.lightbox 的 href)打开灯箱;点图片、点空白、按 Esc、点右上角 × 均可关闭。.spoiler 内容,默认模糊显示;点击后展开,再次点击普通区域可重新隐藏,剧透内的图片、视频和链接仍可正常操作。OP,本人楼层标注绿色 ME。topics/timings 上报,使弹窗阅读也能计入 Connect 进度。https://linux.do 任意页面即可生效。| 操作 | 效果 |
|---|---|
| 点击列表标题 | 弹窗预览该帖,自动定位到合适楼层(从头 / 已读跳未读 / 指定楼层) |
| 滚动弹窗 | 自动双向续加载后续/前序楼层,并按停留时长上报已读 |
| 点击图片 | 原图灯箱查看,点击图片/空白、Esc 或右上角 × 关闭 |
| ♥ 按钮 | 点赞 / 取消赞 |
| ↩ 回复 | 展开回复框,发送后插入楼中楼;支持插入「隐藏详细信息」和「模糊剧透」模板 |
| 🗑 删除 | 删除自己发布的回复,删除后显示占位 |
| Boost 按钮 | 对该楼发送/撤回一条简短文字 Boost |
| 底部悬浮工具栏 | 随时对楼主帖点赞、回复、Boost、收藏、打开原帖,无需滚回顶部 |
| ☆ 收藏本帖 | 收藏 / 取消收藏整帖 |
| ↗ 打开原帖 | 新标签页打开原始帖子页面 |
| Esc / 点击遮罩 / × | 关闭弹窗 |
GET /t/{id}.json 取话题基础信息与完整 post_stream.stream;再以目标楼层(首次为第 1 楼,或"已读跳未读"/指定楼层)为中心,按 SLICE_RADIUS 圈定一个窗口,用 GET /t/{id}/posts.json?post_ids[]=... 批量取回窗口内楼层,避免长帖一次性拉取全部内容。PAGE_SIZE 条),到边界后标记完成并展示"已加载全部评论"提示;向上加载采用整体位移补偿,不会造成视觉跳动。reply_to_post_number 挂到父节点;跨分块未就绪的父级先暂存,块加载完后回扫归位;子回复默认只展示 SUB_REPLY_INITIAL_SIZE 条,点击展开后再分批(SUB_REPLY_PAGE_SIZE)通过 GET /posts/{id}/replies.json 懒加载。IntersectionObserver 记录楼层进入/离开视口的时间戳累计停留时长,达阈值后通过 POST /topics/timings(带 topic_time、timings[楼层]=毫秒)增量上报;切后台自动暂停计时,避免虚增。POST/DELETE /post_actions、回复 POST /posts、删除回复 DELETE /posts/{id}、收藏 POST/DELETE /bookmarks、Boost POST /discourse-boosts/posts/{id}/boosts 与 DELETE /discourse-boosts/boosts/{id},均携带 X-CSRF-Token。已读上报本质上是程序化提交阅读数据,LINUX DO 对异常自动化访问有风控机制。本脚本已尽量贴近真人节奏(按可见性、按停留阈值、增量上报、后台不计时),正常浏览强度下风险较低。但请勿配合任何脚本批量、高频地刷帖,否则可能被判定为异常访问,导致统计不计入甚至账号风险。请按正常阅读节奏使用,风险自负。
本脚本不生成、不代写任何用于发布到社区的内容;回复功能仅转发你本人手动输入的文字。
https://linux.do(@match https://linux.do/*)。fetch、IntersectionObserver、URLSearchParams。Q:点击通知面板里的帖子没反应?
A:不同 Discourse 版本的用户菜单 DOM 结构不同,可在脚本顶部的 MENU_PANEL_SEL 常量中补充该面板的实际容器类名。
Q:图片没按原图显示?
A:脚本优先取外层 a.lightbox 的 href 作为原图;若某图无该外层链接,会回退到 src 显示。
Q:已读没生效?
A:确认已登录,且该楼确实滚动进入视口并停留超过 READ_THRESHOLD;后台标签页不计时。
本项目为个人学习与效率工具,与 LINUX DO 官方无关。使用本脚本所产生的一切后果由使用者自行承担。