浏览器插件开发的大致流程详解~

金金金上线!

话不多,只讲你能听懂的前端知识

大致流程

开发浏览器插件的流程通常是选择合适的技术栈和项目模板(如基于 Vite + Vue 的模板),然后在扩展清单配置文件(如 manifest.config.ts)中定义扩展的基本信息、权限和资源,接着使用现代前端框架(如 Vue)语法结合浏览器扩展 API(如 chrome.actionchrome.sidePanel 等)来实现具体功能,最后通过构建工具(如 Vite 配合 @crxjs/vite-plugin)将代码打包成标准的浏览器扩展格式。

  • 详细流程

    1. 项目初始化

    2. 扩展配置

      • manifest.config.ts 中定义扩展的核心配置
      • 分别为 ChromeFirefox 配置特定的 manifest.chrome.config.tsmanifest.firefox.config.ts
    3. 功能开发

      • 使用 Vue 3 语法开发 UI 组件和页面

      • 利用浏览器扩展 API 实现扩展功能:

        • 后台脚本 (src/background/index.ts) 处理全局事件
        • 内容脚本 (src/content-script/) 在网页中运行
        • 扩展页面 (src/ui/) 提供用户界面
    4. 构建打包

      • 使用 Vite + @crxjs/vite-plugin 构建扩展
      • 生成符合 ChromeFirefox 规范的扩展包

常用API

存储API

php 复制代码
// 本地存储读取
chrome.storage.local.get(keys?: string | string[] | {[name: string]: any})
​
// 本地存储写入
chrome.storage.local.set( items: {[name: string]: any})

标签页API

typescript 复制代码
// 查询标签页
chrome.tabs.query(queryInfo: {属性过多不一一列举}, callback?: (result: Tab[]) => void)
​
// 标签页事件监听
// 监听标签页自身状态的动态变化(如加载进度、URL 变更、标题更新等)
chrome.tabs.onUpdated.addListener(callback?: () => void)
// 监听标签页被销毁(用户主动关闭、窗口关闭或浏览器崩溃等)
chrome.tabs.onRemoved.addListener(callback?: () => void)
// 监听标签页获得焦点(成为当前窗口的最前台标签)
chrome.tabs.onActivated.addListener(callback?: () => void)
​
// 向标签页发送消息
chrome.tabs.sendMessage(tabId: number, message: any, options?: {frameId?: number, documentId?: string)
​
// 标签页信息获取
chrome.tabs.get(tabId: number,  callback?: (tab: Tab,) => void)

扩展运行时API

typescript 复制代码
// 消息监听
// 扩展内部通信机制的监听器,用于接收其他扩展组件(如 popup、content script、background 脚本等)发送的消息
chrome.runtime.onMessage.addListener(callback?: () => void)
// 扩展生命周期事件的监听器,用于监听扩展的安装、更新或浏览器升级导致的重装事件
chrome.runtime.onInstalled.addListener(callback?: () => void)
​
// 发送消息
chrome.runtime.sendMessage(message: any, options?: {includeTlsChannelId?: boolean})
​
// 打开选项页面
chrome.runtime.openOptionsPage()
​
// 获取扩展URL
chrome.runtime.getURL(path: string)

侧边栏API

less 复制代码
// 打开侧边栏
chrome.sidePanel.open(options: OpenOptions)
​
// 设置面板行为
chrome.sidePanel.setPanelBehavior(behavior: PanelBehavior)

扩展图标API

javascript 复制代码
// 监听扩展图标点击
chrome.action.onClicked.addListener(callback?: () => void)

上下文菜单API

php 复制代码
// 创建菜单
chrome.contextMenus.create(createProperties: CreateProperties, callback?: () => void)
​
// 删除所有菜单
chrome.contextMenus.removeAll()
​
// 菜单点击监听
chrome.contextMenus.onClicked.addListener(callback?: () => void)
​
// 更新菜单
chrome.contextMenus.update(id: number | string, updateProperties: {具体类型去源码定义看})

浏览器扩展与 iframe 通信机制

浏览器扩展向 iframe 发送消息

less 复制代码
// 获取 iframe 元素
const iframe = document.querySelector('iframe')
// 向 iframe 发送消息
iframe?.contentWindow?.postMessage(rmessage: any, targetOrigin: string, transfer?: Transferable[])

浏览器扩展接收 iframe 的消息

javascript 复制代码
// 接收来自 iframe 的消息
window.addEventListener('message', (event) => {
})

iframe 向浏览器扩展发送消息

php 复制代码
// 在web端iframe中发送消息给扩展
window.parent.postMessage(message: any, targetOrigin: string, transfer?: Transferable[]);

iframe 接收浏览器扩展的消息

javascript 复制代码
// 接收来自 扩展 的消息
window.addEventListener('message', (event) => {
})

编写有误还请各位指正,万分感谢

相关推荐
石小石Orz3 小时前
我发现了开发者AI产品营收的新方向
前端·虚拟现实
老马识途2.03 小时前
关于跨域问题的总结
java·前端
别惊醒渔人5 小时前
Vue3 Diff 优化:最长递增子序列 LIS
前端·javascript·vue.js
颜酱5 小时前
07 | 把字段与指标同步到 Qdrant(生成阶段)
前端·人工智能·后端
用户059540174465 小时前
把AI长期记忆测试从手动验证换成pytest,2天揪出11个隐藏Bug
前端·css
lichenyang4536 小时前
从 Vite 空项目到 AIGC 图片工作台:我如何打通生图、任务轮询、生成库与 Canvas 动态特效
前端·人工智能
泡沫冰@6 小时前
上章节中文件的讲解
前端·网络·nginx
进击的丸子7 小时前
APP人脸识别增值版Harmony Demo实操与关键代码解析
前端·程序员·harmonyos
a1117767 小时前
唯美花朵风格的黑胶唱片音乐播放器
前端·css·css3
Hilaku7 小时前
工作 5 年后,决定你薪资上限的究竟是什么?
前端·javascript·程序员