# QuickFind-extenssion
**Repository Path**: tekintian/QuickFind-extenssion
## Basic Information
- **Project Name**: QuickFind-extenssion
- **Description**: No description available
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-11-03
- **Last Updated**: 2026-11-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🔍 QuickFind
### **一搜即达,极速定位您的数字足迹**
**最轻量、最智能、最尊重隐私的浏览器搜索增强工具**
[](https://opensource.org/licenses/MIT)
[](https://github.com/tekintian/QuickFind-extenssion)
---
**QuickFind** 让您告别浏览器书签、历史记录和打开标签页的混乱。一键启动,智能搜索,毫秒响应——无论是模糊匹配还是精确查找,都能让您在瞬间找到所需内容。
> **Slogan**: 一搜即达 | Find anything, instantly
---
✨ **核心优势**
- ⚡ **极速响应** - 轻量级架构(< 150KB),毫秒级搜索体验
- 🎯 **智能匹配** - 双模式搜索(模糊/精确),支持 CJK 中日韩字符
- 🏷️ **标签系统** - 为书签打标签,让分类更清晰
- 🔐 **隐私优先** - 零数据收集,零外部请求,完全本地化运行
- 🌍 **双语支持** - 中英文无缝切换,自动检测浏览器语言
- ⚙️ **高度定制** - 丰富的配置选项,满足个性化需求
- 🌓 **自适应主题** - 自动跟随系统深色/浅色模式
- ⌨️ **快捷键导航** - 支持 Emacs/Vim 风格,提升效率
## Installation / 安装
本项目目前仅支持本地安装使用,安装步骤如下:
### 本地安装步骤
1. 克隆或下载本项目到本地
2. 执行构建命令:
```bash
npm install
npm run build
npm run build:bundle && npm run build:create-dist
```
3. 浏览器扩展安装:
- **Chrome/Edge**: 打开 `chrome://extensions/`,开启"开发者模式",点击"加载已解压的扩展程序",选择项目 `dist` 文件夹
- **Firefox**: 打开 `about:debugging#/runtime/this-firefox`,点击"临时载入附加组件",选择 `dist` 文件夹中的 `.xpi` 或 `manifest.json` 文件
- **Opera**: 打开 `opera://extensions/`,开启"开发者模式",点击"加载已解压的扩展程序",选择项目 `dist` 文件夹
> 💡 更多本地开发信息请参考 [CONTRIBUTING.md#local-development](./docs/CONTRIBUTING.md#local-development)
## 功能特性
**本扩展不收集任何数据,也不进行任何外部请求**(参见[隐私保护](#隐私--数据保护))。
### 🔎 智能搜索
- **双模式搜索**
- 精确搜索:速度更快,精确匹配结果
- 模糊搜索:近似匹配,找到更多相关内容
- **搜索结果排序**:基于多维度评分系统(标题、URL、标签、访问频率等)
- **高亮显示**:搜索关键词实时高亮,快速定位
### 🏷️ 标签管理
- 为书签添加标签,支持多标签管理
- 智能自动补全,提升标签输入效率
- 标签搜索模式(`#标签名`),精准筛选
- 支持标签组合搜索(AND 逻辑,如 `#github #pr`)
### 📁 文件夹导航
- 文件夹搜索模式(`~文件夹名`),快速定位特定目录
- 支持文件夹组合搜索,跨文件夹查找
### 🔍 高级搜索模式
| 模式 | 说明 | 示例 |
|------|------|------|
| `#标签` | 仅搜索包含指定标签的书签 | `#github #pr` |
| `~文件夹` | 仅搜索指定文件夹中的书签 | `~Sites ~Blogs` |
| `b 关键词` | 仅搜索书签 | `b quickfind` |
| `h 关键词` | 仅搜索历史记录和标签页 | `h tutorial` |
| `t 关键词` | 仅搜索打开的标签页 | `t docs` |
| `s 关键词` | 建议搜索引擎 | `s weather` |
### ⌨️ 快捷操作
- **快捷键启动**:默认 `Ctrl+Shift+.`(可自定义)
- **键盘导航**:
- `Ctrl+J` / `Ctrl+N` - 向下选择
- `Ctrl+K` / `Ctrl+P` - 向上选择
- **打开方式**:
- 默认:在新标签页打开,或切换到已有标签页
- `Shift` / `Alt`:在当前标签页打开
- `Ctrl`:打开但不关闭搜索窗口
- 右键:复制 URL 到剪贴板
### 🌍 多语言支持
- 支持**中文和英文**双语界面
- 系统自动根据浏览器语言选择默认语言
- 用户可以手动切换语言,设置会自动保存
- 完整的国际化(i18n)架构,易于扩展更多语言
> 💡 查看国际化文档:[I18N.md](./docs/I18N.md)
### ⚙️ 高度可定制
该扩展高度可定制(参见[用户配置](#用户配置)),并根据您的系统设置选择深色/浅色主题(参见 [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme))。它非常轻量(包括依赖项在内的 JavaScript 代码少于 150kb)。
> 💡 查看使用技巧集合:[Tips & Tricks](./docs/Tips.md)
## 使用指南
### 基本操作
- **切换搜索模式**:点击搜索栏右上角的 **FUZZY**(模糊)或 **PRECISE**(精确)按钮
- **自定义快捷键**:默认 `Ctrl+Shift+.`,建议改为 `Ctrl+J` 更符合使用习惯
- **智能 URL 导航**:输入完整网址(如 `example.com`)可直接访问
### 高级技巧
**🎯 提升搜索结果的排名**
- 在书签标题中添加 ` +数字` 提升优先级
- 示例:`GitHub +20`、`QuickFind +10 #search #extension`
**🔧 自定义搜索引擎**
- 通过 `customSearchEngines` 配置选项添加自己的搜索别名
- 示例配置:
```yaml
customSearchEngines:
- alias: ['g', 'bing']
name: Bing
urlPrefix: https://cn.bing.com/search?q=$s
- alias: npm
name: NPM
urlPrefix: https://www.npmjs.com/search?q=$s
```
**⚙️ 特殊页面支持**
- 可以将浏览器内部页面(如 `chrome://downloads`、`about:preferences`)添加到书签中快速访问
**🚫 最佳实践**
- 避免在非标签的书签标题中使用 `#`
- 避免在文件夹名称中使用 `~`
- 标签不能以数字开头(用于过滤 issue/ticket 号码)
---
## 架构概览
```
QuickFind 扩展架构
│
├── 📁 核心模块
│ ├── 搜索引擎 (Search Engine)
│ │ ├── 精确搜索 (Simple Search)
│ │ ├── 模糊搜索 (Fuzzy Search)
│ │ ├── 评分系统 (Scoring)
│ │ ├── 查询解析器 (Query Parser)
│ │ └── 搜索引擎集成 (Search Engines)
│ │
│ ├── 数据模型 (Data Model)
│ │ ├── 选项配置 (Options)
│ │ └── 搜索数据 (Search Data)
│ │
│ └── 视图层 (View Layer)
│ ├── 搜索视图 (Search View)
│ ├── 书签编辑 (Edit Bookmark)
│ ├── 标签管理 (Tags)
│ ├── 文件夹管理 (Folders)
│ └── 选项设置 (Options)
│
├── 🌐 浏览器接口 (Browser API)
│ ├── 书签 API (Bookmarks)
│ ├── 历史记录 API (History)
│ ├── 标签页 API (Tabs)
│ └── 存储 API (Storage)
│
└── 🛠️ 工具模块 (Helpers)
├── 浏览器 API 封装 (Browser API Wrapper)
├── 状态管理 (State Manager)
├── 国际化 (i18n)
└── 工具函数 (Utils)
```
### 技术栈
- **搜索算法**: uFuzzy(模糊搜索)、自定义精确搜索
- **UI 框架**: 原生 JavaScript + CSS
- **构建工具**: esbuild、Biome
- **测试框架**: Jest(单元测试)、Playwright(E2E 测试)
- **依赖库**:
- `@leeoniya/ufuzzy` - 模糊匹配算法
- `@yaireo/tagify` - 标签输入组件
- `mark.js` - 搜索结果高亮
- `js-yaml` - 配置文件解析
---
## 性能优化
### 默认性能配置
QuickFind 已针对大多数使用场景进行优化,但您可以根据需求调整:
**提升搜索速度**(低性能设备)
```yaml
searchStrategy: precise # 使用精确搜索
searchMinMatchCharLength: 2 # 输入 2 字符后才开始搜索
displaySearchMatchHighlight: false # 禁用高亮以提升渲染性能
searchMaxResults: 20 # 限制搜索结果数量
historyMaxItems: 512 # 减少加载的历史记录
maxRecentTabsToShow: 4 # 限制显示的标签页数量
detectDuplicateBookmarks: false # 禁用重复检测
detectBookmarksWithOpenTabs: false # 禁用书签-标签匹配
```
**平衡性能与功能**
```yaml
searchStrategy: fuzzy # 使用模糊搜索
historyMaxItems: 2048 # 增加历史记录数量
maxRecentTabsToShow: 32 # 显示更多标签页
```
**完整配置示例**
```yaml
searchStrategy: fuzzy
searchMinMatchCharLength: 1
historyMaxItems: 2048
maxRecentTabsToShow: 8
detectDuplicateBookmarks: true
detectBookmarksWithOpenTabs: true
```
## 用户配置
该扩展高度可定制。用户选项使用 [YAML](https://en.wikipedia.org/wiki/YAML) 或 [JSON](https://en.wikipedia.org/wiki/JSON) 表示法编写。
> 📘 **查看 [OPTIONS.md](./docs/OPTIONS.md) 了解所有可用选项的完整列表。**
> ⚠️ **注意**: 选项不会进行严格验证,请确保正确使用。如果出现问题,请考虑重置您的选项。
### 基础配置示例
```yaml
searchStrategy: fuzzy # 搜索策略:fuzzy(模糊)或 precise(精确)
displayVisitCounter: true # 显示访问次数
historyMaxItems: 2048 # 历史记录最大数量
maxRecentTabsToShow: 32 # 显示的标签页数量
```
### 高级配置示例
```yaml
# 搜索策略
searchStrategy: fuzzy
searchMinMatchCharLength: 1
searchMaxResults: 50
# 历史记录设置
historyDaysAgo: 30 # 保留最近 30 天的历史
historyMaxItems: 2048
historyIgnoreList: # 忽略的 URL 模式
- extension://
- http://localhost
- http://127.0.0.1
# 显示设置
displayVisitCounter: true
displaySearchMatchHighlight: true
colorStripeWidth: 4 # 颜色条纹宽度
# 评分系统
scoreBookmarkBase: 100 # 书签基础分数
scoreTabBase: 70 # 标签页基础分数
scoreVisitedBonusScoreMaximum: 20 # 访问奖励最大值
# 检测功能
detectDuplicateBookmarks: true # 检测重复书签
detectBookmarksWithOpenTabs: true # 匹配已打开的标签页
# 搜索引擎
customSearchEngines:
- alias: ['g', 'bing']
name: Bing
urlPrefix: https://cn.bing.com/search?q=$s
blank: https://cn.bing.com
- alias: [gh, github]
name: GitHub
urlPrefix: https://github.com/search?q=$s
blank: https://github.com
```
### CJK 中日韩字符优化
```yaml
# 使 CJK 字符适用于模糊搜索
uFuzzyOptions:
interSplit: (p{Unified_Ideograph=yes})+
```
---
## 评分系统详解
QuickFind 使用智能的**5 步评分算法**,确保最相关的结果排在前面:
### 评分流程
```
1️⃣ 基础分数 (Base Score)
↓ 每种结果类型有不同基础值
- 书签: 100
- 标签页: 70
- 历史记录: 60
- 搜索引擎: 50
2️⃣ 搜索质量乘数 (Search Quality Multiplier)
↓ 匹配质量(0-1)
- 模糊/精确搜索算法返回
3️⃣ 字段特定奖励 (Field-Specific Bonus)
↓ 根据匹配位置和内容加分
- 精确开头匹配: scoreExactStartsWithBonus
- 精确完全匹配: scoreExactEqualsBonus
- 标签匹配: scoreExactTagMatchBonus
- 文件夹匹配: scoreExactFolderMatchBonus
- 子字符串匹配: scoreExactIncludesBonus(按权重加权)
* 标题权重: 1.0
* 标签权重: 0.7
* URL 权重: 0.6
* 文件夹权重: 0.5
4️⃣ 行为奖励 (Behavioral Bonus)
↓ 根据使用习惯调整
- 访问频率奖励: scoreVisitedBonusScore
- 最近访问奖励: scoreRecentBonusScoreMaximum
5️⃣ 自定义奖励 (Custom Bonus)
↓ 用户手动调整
- 书签标题中的 `+数字`(需启用 scoreCustomBonusScore)
```
### 评分配置选项
| 选项 | 默认值 | 说明 |
|------|--------|------|
| `scoreBookmarkBase` | 100 | 书签基础分数 |
| `scoreTabBase` | 70 | 标签页基础分数 |
| `scoreHistoryBase` | 60 | 历史记录基础分数 |
| `scoreSearchEngineBase` | 50 | 搜索引擎基础分数 |
| `scoreExactStartsWithBonus` | 15 | 精确开头匹配奖励 |
| `scoreExactEqualsBonus` | 25 | 精确完全匹配奖励 |
| `scoreExactTagMatchBonus` | 20 | 精确标签匹配奖励 |
| `scoreExactFolderMatchBonus` | 15 | 精确文件夹匹配奖励 |
| `scoreExactIncludesBonus` | 5 | 子字符串匹配奖励 |
| `scoreVisitedBonusScore` | 1 | 每次访问奖励 |
| `scoreVisitedBonusScoreMaximum` | 20 | 访问奖励最大值 |
| `scoreRecentBonusScoreMaximum` | 10 | 最近访问奖励最大值 |
| `scoreCustomBonusScore` | true | 启用自定义奖励 |
### 示例:如何提升搜索排名
**方法 1:添加自定义奖励**
```
GitHub +20 # 提升 20 分
QuickFind +10 #search # 提升 10 分 + 标签奖励
```
**方法 2:使用精确匹配关键词**
```
搜索 "quickfind" 会优先显示:
✅ QuickFind (精确匹配)
✅ QuickFind Extension (开头匹配)
⭕ My QuickFind Tips (包含匹配)
```
**方法 3:使用标签和文件夹**
```
搜索 "#github #pr" 会优先显示:
✅ 同时包含 #github 和 #pr 标签的书签
```
> 📖 **详细实现**: 查看 [popup/js/search/scoring.js](popup/js/search/scoring.js)
## 隐私保护 🔒
QuickFind 的设计理念是**完全尊重用户隐私**:
| 隐私特性 | 说明 |
|---------|------|
| **零外部请求** | 没有任何网络通信,数据永不外传 |
| **临时内存** | 除用户配置外,所有数据在弹出窗口关闭时立即清除 |
| **无后台服务** | 只有在打开搜索窗口时才运行,无后台进程 |
| **开源透明** | 完全开源,代码可审计 |
### 权限说明
该扩展仅请求必要的浏览器权限:
| 权限 | 用途 | 可禁用 |
|------|------|--------|
| `bookmarks` | 读取和编辑书签 | ✅ 可通过配置禁用 |
| `history` | 读取浏览历史 | ✅ 可通过配置禁用或限制 |
| `tabs` | 查找和管理标签页 | ✅ 可通过配置禁用 |
| `storage` | 存储用户配置 | ❌ 必需 |
### 数据存储
- **用户配置**:存储在浏览器本地存储(Local Storage)
- **浏览器同步**:如果启用浏览器同步,配置会随之同步
- **零持久化**:书签、历史、标签页等数据实时读取,不持久化存储
---
## 开发指南 🛠️
### 环境要求
- **Node.js**: ^20.20.0
- **包管理器**: npm
### 快速开始
```bash
# 克隆仓库
git clone https://github.com/tekintian/QuickFind-extenssion.git
cd QuickFind-extension
# 安装依赖
npm install
# 构建项目
npm run build
# 运行测试
npm run test
# 启动开发服务器
npm start
```
### 可用命令
| 命令 | 说明 |
|------|------|
| `npm run build` | 构建项目(清理 + 打包 + 格式化) |
| `npm run test` | 运行单元测试 |
| `npm run test:watch` | 监听模式运行单元测试 |
| `npm run test:e2e` | 运行 E2E 测试(Playwright) |
| `npm run lint` | 代码检查 |
| `npm run lint:fix` | 自动修复代码问题 |
| `npm run format` | 格式化代码 |
| `npm run start` | 启动开发服务器 |
| `npm run size` | 查看构建产物大小 |
### 项目结构
```
QuickFind/
├── manifest.json # 扩展配置清单
├── package.json # 项目配置和依赖
├── popup/ # 弹出窗口界面
│ ├── index.html # 主搜索界面
│ ├── options.html # 设置页面
│ ├── editBookmark.html # 书签编辑
│ ├── folders.html # 文件夹管理
│ ├── tags.html # 标签管理
│ ├── css/ # 样式文件
│ ├── js/ # JavaScript 模块
│ │ ├── init*.js # 页面初始化脚本
│ │ ├── helper/ # 工具函数
│ │ ├── model/ # 数据模型
│ │ ├── search/ # 搜索引擎
│ │ └── view/ # 视图层
│ └── lib/ # 第三方库
├── bin/ # 构建脚本
├── docs/ # 项目文档
├── images/ # 图标和资源
├── playwright/ # E2E 测试
└── __tests__/ # 单元测试
```
### 核心模块说明
#### 搜索引擎 (`popup/js/search/`)
- `simpleSearch.js` - 精确搜索实现
- `fuzzySearch.js` - 模糊搜索实现(基于 uFuzzy)
- `scoring.js` - 评分系统
- `queryParser.js` - 查询解析器
- `taxonomySearch.js` - 标签和文件夹搜索
- `searchEngines.js` - 搜索引擎集成
#### 数据模型 (`popup/js/model/`)
- `options.js` - 用户配置管理
- `searchData.js` - 搜索数据加载和缓存
#### 视图层 (`popup/js/view/`)
- `searchView.js` - 搜索结果渲染
- `searchEvents.js` - 搜索事件处理
- `searchNavigation.js` - 键盘导航
- `editBookmarkView.js` - 书签编辑界面
#### 工具模块 (`popup/js/helper/`)
- `browserApi.js` - 浏览器 API 封装
- `i18n.js` - 国际化支持
- `stateManager.js` - 状态管理
- `utils.js` - 通用工具函数
> 📖 **详细开发文档**: [CONTRIBUTING.md](./docs/CONTRIBUTING.md)
---
## 测试 🧪
### 单元测试
```bash
# 运行所有单元测试
npm run test
# 监听模式
npm run test:watch
# 生成覆盖率报告
npm run test:unit:coverage
```
### E2E 测试
```bash
# 运行所有 E2E 测试
npm run test:e2e
# 指定浏览器
npm run test:e2e:chromium
npm run test:e2e:firefox
npm run test:e2e:edge
# 生成 HTML 报告
npm run test:e2e:html
```
---
## 常见问题 ❓
Q: 搜索速度变慢怎么办?
可以尝试以下优化:
1. 切换到精确搜索模式 (`searchStrategy: precise`)
2. 增加 `searchMinMatchCharLength` 到 2 或 3
3. 减少 `historyMaxItems` 的值
4. 减少 `maxRecentTabsToShow` 的值
5. 禁用搜索结果高亮 (`displaySearchMatchHighlight: false`)
Q: 如何备份我的配置?
配置存储在浏览器的本地存储中。可以通过以下方式备份:
1. 打开扩展的选项页面
2. 复制配置内容
3. 保存到本地文件
恢复时,将配置粘贴回选项页面即可。
Q: 中日韩字符搜索不正常?
需要在用户配置中添加:
```yaml
uFuzzyOptions:
interSplit: (p{Unified_Ideograph=yes})+
```
Q: 如何添加自定义搜索引擎?
在用户配置中添加:
```yaml
customSearchEngines:
- alias: ['keyword', 'kw']
name: My Search
urlPrefix: https://example.com/search?q=$s
blank: https://example.com
```
---
## 更新日志 📅
查看 [CHANGELOG.md](./CHANGELOG.md) 了解版本更新历史。
---
## 贡献指南 🤝
欢迎贡献代码、报告问题或提出建议!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 创建 Pull Request
### 贡献规范
- 遵循现有代码风格
- 添加必要的测试
- 更新相关文档
- 保持提交信息清晰
> 📖 **详细贡献指南**: [CONTRIBUTING.md](./docs/CONTRIBUTING.md)
---
## 致谢 🙏
本扩展使用了以下优秀的开源项目:
| 项目 | 用途 |
|------|------|
| [search-bookmarks-history-and-tabs](https://github.com/Fannon/search-bookmarks-history-and-tabs) | 项目灵感来源 |
| [uFuzzy](https://github.com/leeoniya/uFuzzy) | 模糊搜索算法 |
| [Tagify](https://github.com/yairEO/tagify) | 标签输入组件 |
| [Mark.js](https://markjs.io/) | 搜索结果高亮 |
| [js-yaml](https://www.npmjs.com/package/js-yaml) | 配置文件解析 |
| [Tabler Icons](https://github.com/tabler/tabler-icons) | 图标库 |
| [Custom CSS Reset](https://www.joshwcomeau.com/css/custom-css-reset/) | CSS 重置样式 |
特别感谢 [Fannon](https://github.com/Fannon) 创建的原始项目,为 QuickFind 提供了坚实的基础和灵感!
---
## 反馈与支持 💬
- **问题报告**: [GitHub Issues](https://github.com/tekintian/QuickFind-extenssion/issues)
- **功能建议**: [GitHub Discussions](https://github.com/tekintian/QuickFind-extenssion/discussions)
- **问题咨询**: 欢迎在 Issues 中提问
所有的想法、建议和 Bug 报告都欢迎!
---
## 许可证 📄
本项目基于 [MIT License](./LICENSE) 开源协议发布。
---
## 贡献者 👥
- **[tekintian](https://github.com/tekintian)** - 创建者、核心开发、文档维护
- **[Fannon](https://github.com/Fannon)** - 原始项目创建者、架构设计
---
**如果 QuickFind 对你有帮助,请给一个 ⭐️ Star!**
Made with ❤️ by tekintian