1762 字
9 分钟
小绿伞2025年10月9日进度

✅ 本次更新内容
1. 扩展与主程序实时通信 🔄
问题: 在 Electron 应用中添加/删除关键词后,浏览器扩展不会实时更新。
解决方案: 使用 本地 HTTP 服务器
工作原理:
Electron 应用 (启动时) ↓启动本地 HTTP 服务器 (http://localhost:23456) ↓浏览器扩展每 10 秒请求一次 /filter-rules ↓获取最新的关键词和域名规则 ↓自动更新并重新检查所有标签页
关键特性:
- ✅ 无需配置:Electron 启动时自动开启服务
- ✅ 跨浏览器兼容:Chrome、Edge 等都支持
- ✅ 易于调试:可以直接访问
http://localhost:23456/filter-rules
查看规则 - ✅ 智能更新:只有规则真正改变时才更新
- ✅ 自动重试:服务器断开时使用本地缓存
端口说明:
- 默认端口:
23456
- 如果端口被占用,会自动尝试下一个端口
- 启动成功后会在终端显示:
✅ 扩展桥接服务已启动: http://localhost:23456
2. 优化浏览器扩展弹窗 🎨
修改内容:
- ❌ 移除:过滤规则详情(关键词列表、域名列表)
- ❌ 移除:刷新规则按钮
- ✅ 保留:保护状态、今日拦截、总计拦截
- ✅ 新增:简洁的提示信息
- ✅ 优化:更清爽的界面,无长滚动条
为什么这样改?
- 规则由主程序管理,扩展无需显示
- 后期会从服务器获取大量特征库数据,只需显示总数
- 扩展轮询时间改为 1 分钟,自动同步规则
3. 修复窗口圆角渲染闪烁 🪟
问题描述:
软件进入每个导航页面后,窗口四周的圆角地方会变成方框 1-2 秒。
修复措施:
-
修改背景色:
- 之前:
backgroundColor: '#00000000'
(完全透明) - 现在:
backgroundColor: '#f3f4f6'
(浅灰色)
- 之前:
-
延迟显示窗口:
- 在
ready-to-show
事件后延迟 100ms 显示 - 确保页面完全渲染后再显示
- 在
-
禁用背景节流:
- 添加
backgroundThrottling: false
- 防止后台页面被系统节流影响渲染
- 添加
效果:
✅ 窗口切换平滑,无方框闪烁
4. 取消强制登录 🔓
修改内容:
- 之前:软件启动后显示登录页面
- 现在:软件启动后直接进入控制面板(游客模式)
游客模式特性:
- ✅ 可以查看拦截统计
- ✅ 可以使用基本功能
- ⚠️ 使用高级功能(自定义关键词、网址等)时会提示登录
- 🔑 点击”点击登录”按钮可跳转到登录页面
侧边栏显示:
👤 游客模式 [点击登录] (蓝色链接)
🗂️ 文件修改清单
主程序 (Electron)
-
src/main/index.js
- 修改启动页面:从
index.html
→dashboard.html
- 优化窗口配置:背景色、延迟显示、禁用节流
- 启动扩展桥接服务
- 修改启动页面:从
-
src/main/modules/extensionBridge.js
⭐ 新增- 本地 HTTP 服务器
- 提供
/filter-rules
接口 - 提供
/ping
健康检查接口
-
src/main/modules/interceptorManager.js
- 集成
ExtensionBridge
- 启动时自动开启 HTTP 服务
- 集成
-
src/renderer/pages/dashboard.html
- 用户区域改为”游客模式”
- 添加”点击登录”按钮
浏览器扩展
-
src/extension/background.js
- 修改轮询间隔:2秒 → 1分钟
- 修改数据源:扩展内文件 → 本地 HTTP 服务器
- 添加智能变化检测(哈希对比)
- 规则更新时自动通知所有标签页
-
src/extension/popup.html
- 简化界面,移除规则详情
- 移除刷新按钮
- 添加简洁提示信息
-
src/extension/popup.js
- 移除规则显示逻辑
- 移除刷新功能
- 简化为只显示统计信息
-
src/extension/blocked.html
- 优化拦截页面设计
- 静态页面,无 CSP 问题
🚀 使用说明
1. 启动主程序
pnpm start
启动成功后会看到:
✅ 扩展桥接服务已启动: http://localhost:23456扩展桥接服务地址: http://localhost:23456/filter-rules浏览器扩展模式已启用
2. 测试 HTTP 服务
在浏览器中访问:
http://localhost:23456/filter-rules
应该看到类似的 JSON 响应:
{ "blockedDomains": ["example.com"], "allowedDomains": [], "blockedKeywords": ["测试", "摆渡"], "enabled": true, "checkPageContent": false, "lastUpdate": "2025-01-09T12:34:56.789Z", "version": 1}
3. 重新加载浏览器扩展
- 打开
chrome://extensions/
- 找到”小绿伞”扩展
- 点击 刷新按钮 (🔄)
4. 测试实时更新
- 在 Electron 应用的”内容过滤”页面添加关键词
- 等待最多 1 分钟(或立即在浏览器扩展后台查看控制台)
- 扩展会自动获取最新规则
- 访问包含新关键词的网页,应该会被拦截
🔍 调试技巧
查看扩展是否连接到服务器
- 打开
chrome://extensions/
- 找到”小绿伞”,点击 背景页 (或 Service Worker)
- 查看控制台输出:
成功连接:
✅ 过滤规则已更新: 3 个关键词 (之前: 1) 关键词列表: 测试, 百度, 新关键词
连接失败:
无法连接到主程序,使用缓存规则
手动测试 HTTP 服务
在浏览器控制台运行:
fetch('http://localhost:23456/filter-rules') .then(r => r.json()) .then(console.log);
📦 打包后的工作方式
开发环境(现在)
- Electron 应用运行在本地
- HTTP 服务器地址:
http://localhost:23456
- 扩展直接连接到本地服务器
生产环境(打包后)
- 完全相同的工作方式!
- 用户安装
.exe
后,启动应用会自动开启 HTTP 服务器 - 浏览器扩展需要单独安装(后期可以考虑自动安装)
- 只要主程序在运行,扩展就能实时同步规则
端口冲突处理
- 如果 23456 端口被占用,会自动尝试下一个端口
- 扩展会记录最后连接成功的端口(未来优化)
🎯 后续优化建议
-
扩展自动安装
- Electron 应用启动时检测扩展是否安装
- 提供一键安装功能
-
端口动态通知
- 如果端口改变,通过某种方式通知扩展
- 或使用固定的”发现端口”(如 23456 永远是主端口)
-
服务器特征库同步
- 添加
/update-from-server
接口 - 定期从云端获取最新的关键词特征库
- 添加
-
扩展状态监控
- 在主程序显示扩展是否连接
- 显示最后同步时间
-
更智能的轮询
- 使用 WebSocket 替代轮询(实时推送)
- 或使用 Server-Sent Events (SSE)
❓ 常见问题
Q: 为什么不用 Native Messaging?
A:
- 配置太复杂(需要注册表)
- 需要额外的可执行文件
- HTTP 更简单、易调试
Q: HTTP 服务器会被防火墙拦截吗?
A:
- 只监听
localhost
,不对外开放 - 浏览器扩展访问 localhost 无需防火墙权限
Q: 为什么轮询间隔是 1 分钟?
A:
- 平衡实时性和性能
- 避免频繁请求影响性能
- 1 分钟对于家长控制场景已经足够
Q: 如何让更新更实时?
A: 可以将轮询间隔改为更短(如 10 秒):
setInterval(() => { loadFilterRulesFromFile();}, 10000); // 10秒
🎉 完成!
现在系统已经完全支持:
✅ Electron 应用与浏览器扩展的实时通信
✅ 优雅的窗口渲染
✅ 游客模式(无需强制登录)
✅ 简洁的扩展弹窗
下一步可以开始开发:
- 🔐 登录功能
- 🌐 云端特征库同步
- 📊 更详细的统计报表
- ⏰ 时间管理功能的完善