使用Svelte开发Chrome Extension

简介: 起因 最近Chrome浏览器升级到96大版本后,二维码入口从地址栏移动至二级菜单。这对H5前端开发来说不太友好,每次需要页面二维码时都需要多点两下(* ̄︿ ̄)。因此萌生了开发一个二维码Chrome Extension的想法(@ ̄ー ̄@)。经过多方技术选型(React、原生、Vue、Svelte等),最终选择Svelte,原因是语法简单,心智负担小,运行时代码少,打包体积小

一、背景
起因 最近Chrome浏览器升级到96大版本后,二维码入口从地址栏移动至二级菜单。这对H5前端开发来说不太友好,每次需要页面二维码时都需要多点两下(* ̄︿ ̄)。

因此萌生了开发一个二维码Chrome Extension的想法(@ ̄ー ̄@)。
经过多方技术选型(React、原生、Vue、Svelte等),最终选择Svelte,原因是语法简单,心智负担小,运行时代码少,打包体积小

响应式

d=====( ̄▽ ̄*),接下来就开始Svelte × Chrome Extension之旅。
二、创建&开发
2.1 项目创建
2.1.1 项目初始化
使用Svelte Kit新建项目npm`` init svelte@next qrcode-extension ,目录结构如下:

src:源文件目录

lib:组件库等
routes:约定式路由文件
app.html:入口模板文件

static:静态文件目录

svelte.config.js:svelte配置

初始化项目之后可以直接npm`` run dev 启动。
2.1.2 支持插件开发

manifest文件

Extensions are built on web technologies such as HTML, JavaScript, and CSS.

—— Chrome开发文档

Chrome插件本质上是以manifest.json为入口规定的一系列前端资源集合,基于Chrome浏览器提供的API,实现各种功能。

因此在项目的静态资源文件目录中添加manifest.json文件:
{
"name": "QrCode",
"description": "A simple qrcode extension powered by Svelte",
"version": "1.0",
"manifest_version": 3,
"permissions": ["tabs", "downloads"],
"action": {

"default_popup": "index.html"

},
"icons": {

"16": "/images/qrcode-16.png",
"32": "/images/qrcode-32.png",
"48": "/images/qrcode-48.png",
"128": "/images/qrcode-128.png"

}
}
复制代码
几个比较重要的字段:

MV3文件格式参考

manifest_version:manifest版本,之前为Manifest V2(MV2),Chrome推荐使用Manifest V3(MV3)

permissions:扩展要使用的浏览器权限,大部分Chrome扩展API均有权限依赖

action:定义插件操作行为对应的页面

default_popup:点击插件图标时的页面

icons:插件图标

添加chrome类型定义

安装@types/chrome到devDependencies,并在tsconfig.json#compilerOptions#types中添加chrome类型。

2.2 功能开发
2.2.1 需求拆分

参考Chrome浏览器二维码功能:

2.2.2 链接展示

需要获取Chrome浏览器当前打开的tab,查阅开发文档可知对应API为chrome.tabs,并在manifest.json#permissions添加tabs权限声明。

在首页加载时,获取当前tab的url,url展示到输入框,并作为二维码组件的输入属性。
async function getCurrentTab() {
if (typeof chrome === 'undefined' || typeof chrome.tabs === 'undefined') {

return { url: '' };

}
let queryOptions = { active: true, currentWindow: true };
let [tab] = await chrome.tabs.query(queryOptions);
return tab;
}

import { onMount } from 'svelte';

let url = '';
// get current tab's url
onMount(() => {
(async () => {

const tab = await getCurrentTab();
url = tab.url || '';

})();
});
复制代码

相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
使用vue快速开发一个带弹窗的Chrome插件
使用vue快速开发一个带弹窗的Chrome插件
67 0
使用vue快速开发一个带弹窗的Chrome插件
|
3月前
|
Web App开发 JavaScript 前端开发
chrome调试秘籍,让你的开发速度飞起来
chrome调试秘籍,让你的开发速度飞起来
|
7月前
|
Web App开发 存储 前端开发
使用 Chrome 开发者工具研究一个基于 Angular 开发的网站源代码
使用 Chrome 开发者工具研究一个基于 Angular 开发的网站源代码
41 0
|
3月前
|
Web App开发 JSON 前端开发
6款开发必备的Chrome谷歌浏览器扩展(部分火狐、edge浏览器商店也可以用)
6款开发必备的Chrome谷歌浏览器扩展(部分火狐、edge浏览器商店也可以用)
39 0
|
7月前
|
Web App开发
谷歌关闭跨域限制.(生成一个开发浏览器),Chrome关闭跨域
谷歌关闭跨域限制.(生成一个开发浏览器),Chrome关闭跨域
414 0
|
9月前
|
Web App开发 JavaScript 前端开发
如何用vite+vue-next快速开发chrome插件
之前写过一篇文章《从开发chrome插件到插件系统设计》,主要讲述了如何开发一个chrome插件和chrome插件设计,感兴趣的同学可以再去看看。
711 0
|
9月前
|
Web App开发 前端开发 JavaScript
从开发chrome插件到插件系统设计
最近ChatGPT的技术概念很火热,开发了一个node-gptcommit开源项目,主要利用GPT用来自动生成git commit的信息。
220 0
|
10月前
|
Web App开发 测试技术 API
chrome插件-开发简陋的在线api测试工具
chrome插件-开发简陋的在线api测试工具
97 0
|
Web App开发 JavaScript 前端开发
在半小时内从无到有开发并调试一款Chrome扩展(Chrome插件/谷歌浏览器插件)
就在不久之前,我们目前这个毕业班的班长那日同学和我说,他正在公司开发Chrome扩展,看起来很高大上的技术,实际开发却非常简单,这引起了我非常浓厚的兴趣,正所谓技不压身,检验自身技术的手段之一就是拥抱新事物,这一次我们尝试在半小时内开发一款Chrome扩展,因为之前我们做了一个[微信小程序的在线面试题题库](https://v3u.cn/a_id_116)的项目,所以正好利用这个题库将面试题平移到Chrome扩展上面。
在半小时内从无到有开发并调试一款Chrome扩展(Chrome插件/谷歌浏览器插件)
|
Web App开发 JavaScript 中间件
开发chrome插件auto reload原理分析
开发chrome插件auto reload原理分析
383 0