使用 Trae 辅助开发一个网页文本高亮插件

新手第一次开发浏览器插件,抖音刷到了 Trae,这几天就使用它开发了一个浏览器文本高亮插件。做了个七七八八,肯定还有不少 Bug。

项目概述

本插件是一个用于在网页上高亮显示选中文本的工具,支持多种颜色选择、高亮复制和删除等功能。插件基于 Edge 扩展测试开发。

目前只大致开发了内容交互脚本和插件弹出页,后台管理页暂未开发。

项目结构

复制代码
c:\Users\lc\Documents\前端项目代码\Egde高亮插件
├── content/
│   ├── content.js        // 核心逻辑代码
│   └── highlight.css     // 高亮样式
├── popup/
│   ├── popup.css         // 弹出页样式
│   ├── popup.html        // 弹出页HTML
│   └── popup.js          // 弹出页逻辑
└── manifest.json         // 插件配置文件

功能概览

存储结构

使用 chrome.storage.local 管理高亮的存储信息,其存储结构如下

复制代码
[url]
├── item
│ 	├── id
│ 	├── color
│ 	├── startXPath
│ 	├── endXPath
│ 	├── textFingerprint
│ 	├── contextFingerprint
│ 		├── before
│ 		├── after

startXPath、endXPath 是之前尝试使用 startConatiner、endContainer 的 XPath 以及它们的偏移量来确定 Range 的时候添加的,这个方法是不准确的,因为偏移量会受其它高亮的影响。所以它两可以删除。

核心功能

  1. 高亮管理
    • 通过 PageHighlightStorage 类管理高亮信息
      • 使用 chrome.storage.local 实现数据持久化
      • 支持添加、删除、更新和查询高亮记录
  2. 高亮创建
    • 通过 saveHighlightInfo 保存高亮信息
      • 使用 getXPath 获取元素路径
      • 通过 generateTextFingerprintgenerateContextFingerprint 生成文本指纹和上下文指纹
  3. 高亮恢复
    • 通过 restoreHighlights 恢复已保存的高亮
      • 使用 createRangeByFingerprint 根据指纹重新创建Range对象,能处理跨节点的高亮,匹配算法确保高亮位置准确
      • 采用Levenshtein算法进行文本匹配
  4. 高亮操作
    • 通过 createToolbox 创建操作工具框
      • 支持颜色切换、删除和复制高亮内容
      • 使用 applyHighlightToRange 将高亮应用到文本范围
  5. 与插件弹出页交互
    • 通过 chrome.tabs.query、chrome.tabs.sendMessage 和 通过 chrome.tabs.onMessage 建立消息通信,实现清除页面全部功能的按钮
  6. 错误处理
    • 自动清理无效的高亮记录
    • 处理各种边界情况
    • 提供详细的日志输出

dawnkylin/edge-ext-text-highlighter: A web extension for highlighting text

相关推荐
爸爸6197 分钟前
07 ArkTS 基础类型与接口定义:从 TypeScript 到鸿蒙的类型升级
javascript·华为·typescript·harmonyos·鸿蒙系统
默_笙1 小时前
🌏 MCP 是 AI 界的 USB-C:一个协议让所有模型都能用上所有工具
前端·javascript
月光刺眼3 小时前
用LangChain 打造第一个 Agent:LLM 大脑与 Tool 手脚的完整闭环
javascript·人工智能·全栈
西西学代码3 小时前
Flutter---底部导航栏(2)
开发语言·javascript·flutter
阿奇__4 小时前
uniapp微信小程序图片上传含回显组件(拍照,相册)
前端·javascript·vue.js
浮江雾5 小时前
Flutter第二节----Dart中的常量与变量
开发语言·前端·javascript·flutter·入门
Dlrb12115 小时前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询
大家的林语冰5 小时前
Rust 再次打败 Go,Astro 7 首发,什么叫“万物皆可锈化“!
前端·javascript·性能优化
zhanghaofaowhrql6 小时前
为CSDN博客编辑器安装自定义CSS主题,打造个性化写作界面
前端·css·编辑器
用户938515635076 小时前
从零打造你的第一个智能体(Agent):*手写一个能自主建项目的Mini Cursor (三)
javascript·人工智能·后端