## 2.1 浏览器看了啥
浏览记录上传 + AI 日报方案
架构总览
Chrome Extension (content.js + background.js)
$\downarrow$ 实时追踪 tab 切换/关闭,计算停留时长
$\downarrow$ 攒到 buffer,每 5 分钟或 20 条批量上传
Supabase (browsing_records 表)
$\downarrow$ 每天 UTC+8 06:00 触发 Edge Function
Edge Function (generate-daily-summary)
$\downarrow$ 读取昨日记录 $\rightarrow$ 调 OpenRouter (Gemini Flash) 生成总结
$\downarrow$ 写入 daily_browsing_summaries 表
$\downarrow$ 调 Notion API 写入 Database
Notion Database (每天一条记录)
content.js 抓取页面正文 $\rightarrow$ background.js 缓存
$\downarrow$
durationTracker 结束计时时 $\rightarrow$ 关联正文内容 $\rightarrow$ 写入 buffer
$\downarrow$
buffer 满 10 条或每 5 分钟 $\rightarrow$ 上传到 Supabase(含完整内容)
每条记录现在包含 9 个维度:
| 字段 | 说明 |
| :------------------- | :------------------------ |
| url | 完整网址 |
| title | 页面标题 |
| domain | 域名 |
| visit_time | 访问时间 |
| duration_seconds | 停留时长 |
| content | 页面正文(最多 10000 字) |
| excerpt | 摘要(200 字) |
| language | zh / en |
| reading_time_minutes | 预估阅读时间 |
### 插件侧:记录机制
content.js:
页面加载 $\rightarrow$ 提取正文内容 $\rightarrow$ 发送 SAVE_PAGE_CONTENT
每 30 秒 $\rightarrow$ 检测鼠标/滚动/键盘是否活跃 $\rightarrow$ 发送 HEARTBEAT(含 scrollDepth)
background.js:
收到 HEARTBEAT $\rightarrow$ 更新 durationTracker 的活跃状态
收到 SAVE_PAGE_CONTENT $\rightarrow$ 缓存内容 + 存本地
durationTracker.js:
tab 切换/关闭/idle $\rightarrow$ 结算记录(含活跃时长、滚动深度、内容)
每 2 分钟检查 $\rightarrow$ 如果仍在活跃看同一页面 $\rightarrow$ 产生分段记录(不漏长会话)
supabaseUploader.js:
buffer 满 10 条 / 每 5 分钟 / 启动时 $\rightarrow$ 上传到 Supabase
## 过审的问题
$\blackcircle$ 坦率说,以目前的形态审核通过的难度较大。主要问题:
高风险点
1. 权限过广
- <all_urls> host permission + content script 在所有页面运行
- tabs + idle 组合 $\rightarrow$ 完整追踪用户行为
- Chrome 对这类「广泛权限」的插件审核非常严格
2. 数据收集量过大
- 提取每个页面的正文内容(10000 字)
- 滚动深度、交互事件数
- 全部发送到远程服务器(Supabase)
- 这触犯了 Chrome 的 User Data Privacy 政策
3. 缺少必要声明
- 没有 privacy_policy 字段
- 没有在安装/使用前征得用户明确同意
- 数据收集没有在扩展描述中充分披露
如果想过审,需要做的改动
| 改动 | 说明 |
| :----------------- | :----------------------------------------------------------- |
| 添加隐私政策页面 | 托管在网上,manifest 加 homepage_url |
| 首次使用弹窗授权 | 明确告知「本插件会收集您的浏览内容和时长」,用户点同意才开始 |
| 在商店描述中披露 | 列出所有收集的数据类型和用途 |
| 数据收集必须 opt-in | 登录 = 同意上传,未登录时只本地存储 |
| 减少不必要的收集 | engagement_events 等行为数据可能被视为过度收集 |
现实建议
如果这个插件只是你自己用,不需要上架 Web Store。直接以开发者模式加载(你现在就是这么用的)完全够了,也没有权限限制。
如果确实想上架(比如给别人用),建议把它改成「用户主动触发记录」模式而非「自动全量追踪」,或者剥离出内容提取功能,只保留 URL +
时长统计,这样过审概率高得多。
## 中文内容
3. 中文版的核心差异点:从“生词”到“上下文”
你之前的英语插件是:
单词 (Word) -> 翻译 (Translation)
中文版(针对母语者或高阶学习者)应该是:
术语/概念 (Term) -> 上下文/出处 (Context/Source)
为什么这是 High ROI? 就像你说的,你想穷尽你的“单词量”。在中文语境下,这个“单词量”其实是你的知识图谱节点。
看到“熵增”,你知道是物理概念,但在管理学文章里,它代表“组织混乱度增加”。
记录这个词,并记录它是在哪篇文章里被标记的,比单纯记下“熵增=Entropy”更有价值。
总结建议
如果你要做中文版,建议不要复用 CEFR 分级逻辑(A1-C2 对母语者无意义)。
建议的新逻辑:
以“划词”为主,自动高亮为辅:中文边界难定,让用户手动划出“降本增效”比自动切分更准。
利用 Intl.Segmenter 辅助选中:当用户鼠标双击时,利用原生 API 智能扩展选中范围(选中“人工”自动扩展到“人工智能”)。
AI 分析侧重于“概念解释”:每日回顾时,AI 不是生成包含这个词的故事,而是生成这个概念的深度解析或反直觉的用法。
需要我为你写一个基于 Intl.Segmenter 的简单中文分词 Demo,看看它在浏览器里的实际效果吗?