- 浏览历史与未读ID browsing_history版本 1.0.2插件制作者 233免费113 行 / 13.9 KBHook / 路由记录浏览过的主题、阅读楼层和更新状态,支持继续阅读、筛选、清理与 JSON 备份。app/plugins/browsing_history/plugin.php开发日志已有 3 条
此项目接受所有登录用户协助维护和提交更新。
主楼 插件质量报告
插件:
browsing_historyHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 page.footer 全站页面页脚 否 5 - - - - topic.after_render 首页/版块列表/主题查看逐条渲染 是 5 - - - - topic.after_view 主题查看页完成加载 否 4 - - - - user.menu_links 个人卡片/移动端我的菜单(展示位置:个人卡片) 否 4 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
未检测到插件数据表声明。
🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
导入 JSON 存在 DOM XSS 风险:render() 用 innerHTML 拼接 href="/topic/'+r.topicId+'#'+(r.lastSeenFloor||0)+'"(plugin.php:8),而导入分支 put(KEY,x.records) 未校验字段类型,构造的导入文件可注入脚本(title 已用 textContent 是安全的)。请导入后用 Number() 归一 topicId/lastSeenFloor,或用 createElement + setAttribute 构建链接。
⚡ 性能问题
脚本经 page.footer 注入每个页面,并在整站所有页面执行 new MutationObserver(decorate).observe(document.body,{childList:true,subtree:true})(plugin.php:8),每次 DOM 变化都重复 querySelectorAll,开销较大。建议仅在存在主题列表/历史页的页面启用,限定观察目标并给 decorate 加节流。
🐛 功能/规范缺陷
localStorage 无条数上限,写入失败被静默吞掉(plugin.php:8 中 put 的 catch 为空),历史较多时可能写满配额且无提示。建议设置最大条数并淘汰最旧记录,写入失败时提示用户。
✅ 修复优先级
- 修复导入 XSS(字段校验/安全构建 DOM);2. 收敛 MutationObserver 范围;3. 限制存储条数并处理写入失败。
旧格式迁移:已将插件代码转存到开发日志,主题正文改为基础介绍。
在移动端上,“仅看有更新”几个字太占位置了,很不协调,可以修改成一个字“新”吗?😬
版本 1.0.1 更新:
共享版本 1.0.2 更新:
修复 “浏览历史与未读”插件的两处逻辑错误:- 重复添加标签:它给每个帖子链接都加“已读”,因此标题、“未读”入口、页码“2”后面各出现一次。
- 回复数识别错误:它只识别“31回复”这类文字,但页面实际显示“图标+31”,结果被读成 0 条回复,误判为已读;另一个“未读主题提醒”插件仍显示未读,于是状态冲突。