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. 规则由主程序管理,扩展无需显示
  2. 后期会从服务器获取大量特征库数据,只需显示总数
  3. 扩展轮询时间改为 1 分钟,自动同步规则

3. 修复窗口圆角渲染闪烁 🪟#

问题描述:#

软件进入每个导航页面后,窗口四周的圆角地方会变成方框 1-2 秒。

修复措施:#

  1. 修改背景色

    • 之前:backgroundColor: '#00000000' (完全透明)
    • 现在:backgroundColor: '#f3f4f6' (浅灰色)
  2. 延迟显示窗口

    • ready-to-show 事件后延迟 100ms 显示
    • 确保页面完全渲染后再显示
  3. 禁用背景节流

    • 添加 backgroundThrottling: false
    • 防止后台页面被系统节流影响渲染

效果:#

✅ 窗口切换平滑,无方框闪烁


4. 取消强制登录 🔓#

修改内容:#

  • 之前:软件启动后显示登录页面
  • 现在:软件启动后直接进入控制面板(游客模式)

游客模式特性:#

  • ✅ 可以查看拦截统计
  • ✅ 可以使用基本功能
  • ⚠️ 使用高级功能(自定义关键词、网址等)时会提示登录
  • 🔑 点击”点击登录”按钮可跳转到登录页面

侧边栏显示:#

👤 游客模式
[点击登录] (蓝色链接)

🗂️ 文件修改清单#

主程序 (Electron)#

  1. src/main/index.js

    • 修改启动页面:从 index.htmldashboard.html
    • 优化窗口配置:背景色、延迟显示、禁用节流
    • 启动扩展桥接服务
  2. src/main/modules/extensionBridge.js ⭐ 新增

    • 本地 HTTP 服务器
    • 提供 /filter-rules 接口
    • 提供 /ping 健康检查接口
  3. src/main/modules/interceptorManager.js

    • 集成 ExtensionBridge
    • 启动时自动开启 HTTP 服务
  4. src/renderer/pages/dashboard.html

    • 用户区域改为”游客模式”
    • 添加”点击登录”按钮

浏览器扩展#

  1. src/extension/background.js

    • 修改轮询间隔:2秒 → 1分钟
    • 修改数据源:扩展内文件 → 本地 HTTP 服务器
    • 添加智能变化检测(哈希对比)
    • 规则更新时自动通知所有标签页
  2. src/extension/popup.html

    • 简化界面,移除规则详情
    • 移除刷新按钮
    • 添加简洁提示信息
  3. src/extension/popup.js

    • 移除规则显示逻辑
    • 移除刷新功能
    • 简化为只显示统计信息
  4. src/extension/blocked.html

    • 优化拦截页面设计
    • 静态页面,无 CSP 问题

🚀 使用说明#

1. 启动主程序#

Terminal window
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. 重新加载浏览器扩展#

  1. 打开 chrome://extensions/
  2. 找到”小绿伞”扩展
  3. 点击 刷新按钮 (🔄)

4. 测试实时更新#

  1. 在 Electron 应用的”内容过滤”页面添加关键词
  2. 等待最多 1 分钟(或立即在浏览器扩展后台查看控制台)
  3. 扩展会自动获取最新规则
  4. 访问包含新关键词的网页,应该会被拦截

🔍 调试技巧#

查看扩展是否连接到服务器#

  1. 打开 chrome://extensions/
  2. 找到”小绿伞”,点击 背景页 (或 Service Worker)
  3. 查看控制台输出:

成功连接:

✅ 过滤规则已更新: 3 个关键词 (之前: 1)
关键词列表: 测试, 百度, 新关键词

连接失败:

无法连接到主程序,使用缓存规则

手动测试 HTTP 服务#

在浏览器控制台运行:

fetch('http://localhost:23456/filter-rules')
.then(r => r.json())
.then(console.log);

📦 打包后的工作方式#

开发环境(现在)#

  • Electron 应用运行在本地
  • HTTP 服务器地址:http://localhost:23456
  • 扩展直接连接到本地服务器

生产环境(打包后)#

  • 完全相同的工作方式!
  • 用户安装 .exe 后,启动应用会自动开启 HTTP 服务器
  • 浏览器扩展需要单独安装(后期可以考虑自动安装)
  • 只要主程序在运行,扩展就能实时同步规则

端口冲突处理#

  • 如果 23456 端口被占用,会自动尝试下一个端口
  • 扩展会记录最后连接成功的端口(未来优化)

🎯 后续优化建议#

  1. 扩展自动安装

    • Electron 应用启动时检测扩展是否安装
    • 提供一键安装功能
  2. 端口动态通知

    • 如果端口改变,通过某种方式通知扩展
    • 或使用固定的”发现端口”(如 23456 永远是主端口)
  3. 服务器特征库同步

    • 添加 /update-from-server 接口
    • 定期从云端获取最新的关键词特征库
  4. 扩展状态监控

    • 在主程序显示扩展是否连接
    • 显示最后同步时间
  5. 更智能的轮询

    • 使用 WebSocket 替代轮询(实时推送)
    • 或使用 Server-Sent Events (SSE)

❓ 常见问题#

Q: 为什么不用 Native Messaging?#

A:

  • 配置太复杂(需要注册表)
  • 需要额外的可执行文件
  • HTTP 更简单、易调试

Q: HTTP 服务器会被防火墙拦截吗?#

A:

  • 只监听 localhost,不对外开放
  • 浏览器扩展访问 localhost 无需防火墙权限

Q: 为什么轮询间隔是 1 分钟?#

A:

  • 平衡实时性和性能
  • 避免频繁请求影响性能
  • 1 分钟对于家长控制场景已经足够

Q: 如何让更新更实时?#

A: 可以将轮询间隔改为更短(如 10 秒):

src/extension/background.js
setInterval(() => {
loadFilterRulesFromFile();
}, 10000); // 10秒

🎉 完成!#

现在系统已经完全支持: ✅ Electron 应用与浏览器扩展的实时通信
✅ 优雅的窗口渲染
✅ 游客模式(无需强制登录)
✅ 简洁的扩展弹窗

下一步可以开始开发:

  • 🔐 登录功能
  • 🌐 云端特征库同步
  • 📊 更详细的统计报表
  • ⏰ 时间管理功能的完善
小绿伞2025年10月9日进度
https://www.yn65.com/posts/a11/
作者
晨平安
发布于
2025-10-09
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00