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

金金金上线!

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

大致流程

开发浏览器插件的流程通常是选择合适的技术栈和项目模板(如基于 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) => {
})

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

相关推荐
YAY_tyy2 分钟前
数据处理:要素裁剪、合并与简化
前端·arcgis·turfjs
LYFlied12 分钟前
【每日算法】LeetCode 62. 不同路径(多维动态规划)
前端·数据结构·算法·leetcode·动态规划
console.log('npc')29 分钟前
vue3文件上传弹窗,图片pdf,word,结合预览kkview
前端·javascript·vue.js·pdf·word
inferno35 分钟前
CSS 基础(第二部分)
前端·css
BD_Marathon38 分钟前
Router_路由传参
前端·javascript·vue.js
闲云一鹤1 小时前
Cesium 去掉默认瓦片和地形,解决网络不好时地图加载缓慢的问题
前端·cesium
Dreamcatcher_AC1 小时前
前端面试高频13问
前端·javascript·vue.js
AI陪跑1 小时前
深入剖析:GrapesJS 中 addStyle() 导致拖放失效的问题
前端·javascript·react.js
登山人在路上1 小时前
Vue中导出和导入
前端·javascript·vue.js
消失的旧时光-19431 小时前
Flutter 路由从 Navigator 到 go_router:嵌套路由 / 登录守卫 / 深链一次讲透
前端·javascript·网络