Chrome插件开发实战:如何用Gitee私有仓库保存所有标签页(附完整源码)
2026/6/11 14:59:58 网站建设 项目流程

Chrome插件开发实战:Gitee私有仓库同步标签页完整指南

1. 项目背景与核心思路

每次在Chrome中同时打开十几个研究资料标签页时,最怕的就是浏览器意外崩溃。传统的书签管理方式无法保存完整的会话状态,而云同步服务又存在隐私顾虑。这个插件正是为了解决这个痛点而生——将当前所有标签页信息加密存储到Gitee私有仓库,实现版本可控的会话管理。

核心架构分为三个模块:

  • 数据采集层:通过Chrome API获取当前窗口所有标签页的URL和标题
  • 存储层:利用Gitee API将数据以JSON格式存入指定仓库
  • 交互层:通过浏览器右上角的弹出窗口实现一键保存/恢复

提示:Gitee的免费私有仓库完全够用个人需求,且国内访问速度稳定

2. 开发环境准备

2.1 基础工具链配置

推荐使用以下开发环境组合:

# 检查Node版本(要求v16+) node -v # 初始化项目 mkdir chrome-tabs-saver && cd chrome-tabs-saver npm init -y # 安装TypeScript支持 npm install typescript @types/chrome --save-dev

2.2 插件项目结构

典型Chrome插件需要以下目录结构:

├── manifest.json # 插件配置文件 ├── src │ ├── background.ts # 后台服务脚本 │ ├── popup.html # 弹出窗口界面 │ └── content.ts # 内容脚本(本项目不需要) └── icons # 插件图标目录

2.3 Gitee API准备

  1. 登录Gitee创建私有仓库(如tabs-backup
  2. 在[个人设置→私人令牌]生成Access Token
  3. 记录以下关键信息:
    • 仓库所有者(owner)
    • 仓库名称(repo)
    • 访问令牌(token)

3. 核心功能实现

3.1 标签页数据采集

通过Chrome.tabs API获取当前窗口所有标签页:

interface TabData { url: string; title: string; favIcon?: string; } async function getAllTabs(): Promise<TabData[]> { return new Promise((resolve) => { chrome.tabs.query({ currentWindow: true }, (tabs) => { const result = tabs.map(tab => ({ url: tab.url || '', title: tab.title || '', favIcon: tab.favIconUrl })); resolve(result); }); }); }

3.2 Gitee存储模块

实现文件读写操作的API封装:

const GITEE_API = 'https://gitee.com/api/v5/repos'; async function saveToGitee(data: TabData[]) { const content = btoa(JSON.stringify(data)); const path = `sessions/${new Date().toISOString()}.json`; const response = await fetch( `${GITEE_API}/${owner}/${repo}/contents/${path}`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `token ${token}` }, body: JSON.stringify({ content, message: 'Auto saved tabs' }) } ); if (!response.ok) throw new Error('Save failed'); }

3.3 恢复标签页功能

async function restoreFromGitee(sessionId: string) { const response = await fetch( `${GITEE_API}/${owner}/${repo}/contents/sessions/${sessionId}`, { headers: { Authorization: `token ${token}` } } ); const { content } = await response.json(); const tabs = JSON.parse(atob(content)); // 在新窗口打开所有标签页 chrome.windows.create({ url: tabs.map(t => t.url) }); }

4. 用户界面开发

4.1 弹出窗口设计

popup.html基础结构:

<div class="container"> <h3>标签页管理器</h3> <button id="save">保存当前会话</button> <div class="sessions-list"> <!-- 动态加载历史会话 --> </div> </div>

4.2 样式优化技巧

添加popup.css实现现代化UI:

.container { width: 300px; padding: 12px; } button { background: #2468f2; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; } .sessions-list { margin-top: 12px; max-height: 400px; overflow-y: auto; }

4.3 交互逻辑实现

popup.ts中的事件处理:

document.getElementById('save')?.addEventListener('click', async () => { const tabs = await getAllTabs(); await saveToGitee(tabs); alert('保存成功!'); }); // 加载历史会话列表 async function loadSessions() { const response = await fetch( `${GITEE_API}/${owner}/${repo}/contents/sessions`, { headers: { Authorization: `token ${token}` } } ); const sessions = await response.json(); // 渲染到UI... }

5. 高级功能扩展

5.1 数据加密方案

为保护隐私,建议在存储前加密数据:

import CryptoJS from 'crypto-js'; function encryptData(data: string, password: string): string { return CryptoJS.AES.encrypt(data, password).toString(); } function decryptData(ciphertext: string, password: string): string { const bytes = CryptoJS.AES.decrypt(ciphertext, password); return bytes.toString(CryptoJS.enc.Utf8); }

5.2 自动同步机制

通过Chrome.alarms实现定时备份:

chrome.alarms.create('autoSave', { periodInMinutes: 30 }); chrome.alarms.onAlarm.addListener(async (alarm) => { if (alarm.name === 'autoSave') { const tabs = await getAllTabs(); await saveToGitee(tabs); } });

5.3 跨设备同步方案

在不同设备上安装插件时,可以通过以下方式同步配置:

  1. 将Gitee仓库信息存储在chrome.storage.sync中
  2. 使用相同的加密密码
  3. 通过仓库的commit记录查看历史会话

6. 调试与发布

6.1 本地调试技巧

在Chrome中加载未打包的扩展:

  1. 访问chrome://extensions
  2. 开启"开发者模式"
  3. 点击"加载已解压的扩展程序"

注意:每次修改代码后需要手动刷新扩展

6.2 性能优化建议

针对大量标签页的优化策略:

场景优化方案效果
50+标签页分批存储避免API限制
频繁保存本地缓存差异减少网络请求
历史记录分页加载提升响应速度

6.3 发布到Chrome商店

打包发布流程:

# 生成发布包 zip -r tabs-saver.zip dist/* icons/* manifest.json # 然后到Chrome开发者控制台提交

7. 实际应用场景

7.1 研究资料收集

当进行专题研究时,可以:

  1. 打开所有相关文献标签页
  2. 保存为"区块链研究-202308"会话
  3. 后续随时恢复完整研究环境

7.2 工作流保存

开发人员可以:

  • 保存包含调试工具、文档、IDE的完整工作环境
  • 为不同项目创建独立会话
  • 一键切换工作上下文

7.3 教学演示准备

教师提前配置好:

  • 课程相关的所有在线资源
  • 演示用的Web工具
  • 参考文档链接 在课堂上直接恢复完整环境

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询