Chrome V3版开发教程使用Vue 3.x+Ant构建项目
创始人
2024-05-13 02:28:17
0

简介

​ Google在2023年将会遗弃V2版本,而目前在CSDN平台上的大部分Chrome插件的开发教程都是基于V2版本的,V3版本和V2的版本上还是有很大的区别,就比如manifest.json中的写法差距就很大,所以对于即将要开发Chrome插件的小伙伴来说去写V2版本目前也是可以用的,但是年末就要在经历一波V2转V3版本的迭代。所以不如一步到位直接进行V3版本的开发。而本人又比较偷懒,不愿意使用原生写法去写插件,我所采用的技术是Vue3+Ant Design Vue目前主流技术进行开发。

项目初始化

项目环境

C:\Users\zhizhuo>node -v
v14.19.0
C:\Users\zhizhuo>vue -V
@vue/cli 5.0.8

使用Vue创建项目

vue create my-chrome-vue

image-20230116143719610

这里我直接使用了Vue3的默认选项进行项目创建

image-20230116143927472

先run起来看一下项目是否创建成功。

image-20230116144129321

接下先引入一下Ant Design Vue然后在run起来看一下是否正常引入

npm install ant-design-vue@next --save

然后改造main.js引入一下第三方组件,然后在src/App.vue中使用查看一下是否成功引入

//main.js
import { createApp } from 'vue'
import App from './App.vue'
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';
const app = createApp(App)
app.use(Antd)
app.mount('#app')//App.vue


image-20230116150311822

成功引入进来了,接下来就是要修改项目目录以及vue,webpack配置

项目目录修改

现在的目录

├─public
└─src├─assets└─components

改造后的目录

├─public
└─src├─assets├─background├─components├─options│  └─components├─plugins└─popup└─components

image-20230116152057603

整个src目录的结构,下面修改一个vue.config.js文件,首先安装插件copy-webpack-plugin用来拷贝文件

npm install copy-webpack-plugin -S

vue.config.js文件内容

const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require("path");// 复制文件到指定目录
const copyFiles = [{from: path.resolve("src/plugins/manifest.json"),to: `${path.resolve("dist")}/manifest.json`},{from: path.resolve("src/assets"),to: path.resolve("dist/assets")},{from: path.resolve("src/plugins/inject.js"),to: path.resolve("dist/js")}
];// 复制插件
const plugins = [new CopyWebpackPlugin({patterns: copyFiles})
];// 页面文件
const pages = {};
// 配置 popup.html 页面
const chromeName = ["popup"];chromeName.forEach(name => {pages[name] = {entry: `src/${name}/main.js`,template: `src/${name}/index.html`,filename: `${name}.html`};
});// 配置 popup.html 页面
const ChromeName = ["options"];ChromeName.forEach(name => {pages[name] = {entry: `src/${name}/main.js`,template: `src/${name}/index.html`,filename: `${name}.html`};
});module.exports = {pages,productionSourceMap: false,// 配置 content.js background.jsconfigureWebpack: {entry: {background: "./src/background/main.js"},output: {filename: "js/[name].js"},plugins},// 配置 content.csscss: {extract: {filename: "css/[name].css"}}
}

在plugins/inject.js中写入

console.log("This is injected into")

在background/main.js中写入

console.log('This is background page');

在plugins/manifest.json中写入

{"description": "create by zhizhuo ;use vue3 and ant-vue to build this project","manifest_version": 3,"name": "my-chrome-vue","version": "1.0.0","action": {"default_icon": {"19": "assets/logo.png","38": "assets/logo.png"},"default_popup": "popup.html","default_title": "my-chrome-vue"},"background": {"service_worker": "js/background.js"},"content_scripts": [{"matches": ["http://*/*","https://*/*"],"css": ["css/chunk-vendors.css"],"js": ["js/chunk-vendors.js","js/inject.js"],"run_at": "document_end"}],"host_permissions": ["http://*/*", "https://*/*"],"permissions": ["contextMenus","tabs","notifications","webRequest","storage"],"content_security_policy": {"extension_pages": "script-src 'self'; object-src 'self'","sandbox": "sandbox allow-scripts; script-src 'self'; object-src 'self'"},"web_accessible_resources": [{"resources":["js/inject.js"],"matches":["http://*/*","https://*/*"]}]
}

options和popup文件下面的main.js和index.html,还有当前目录下面的components文件下面的App.vue文件都是项目初始化生成的main.js和App.vue还有public/index.html文件移动过来的

页面文件就是正常的Vue+Ant的开发即可,修改完成后直接使用命令

npm run build

image-20230116153359146

直接打包,然后在chrome的插件中添加即可,*记得打开chrome插件的开发者模式

image-20230116153801484

image-20230116153858550

插件成功导入,并且运行ok,ant的组件也完全引入

剩下的时候开发查看官网的开发文档即可

*https://developer.chrome.com/docs/extensions/mv3/

manifest.json V3版本详细注释

{//chrome插件的版本"manifest_version": 3,//插件名称"name": "ChromeName",//插件版本号"version": "1.0.0",//插件描述,Plugin_Desc是多语言的key,chrome插件支持多语言配置,__MSG_xxx__"description": "__MSG_Plugin_Desc__",//默认语言(如果当前浏览器设置的语言不存在多语言配置文件,则默认中文),Chrome插件的多语言只能根据当前浏览器设置的语言来设定,无法通过代码更改语言"default_locale": "zh_CN",//内容安全政策,V2的value是字符串,V3是对象"content_security_policy": {//原文:此政策涵盖您的扩展程序中的页面,包括 html 文件和服务人员;具体不是很明白,但是参数值得是self,即当前自己"extension_pages": "script-src 'self'; object-src 'self'",//原文:此政策涵盖您的扩展程序使用的任何[沙盒扩展程序页面];具体不是很明白,但是参数值得是self,即当前自己"sandbox": "sandbox allow-scripts; script-src 'self'; object-src 'self'"},//key,发布插件后会给一个key,把那个key的值放这里"key": "xxx",//icon,浏览器扩展程序管理里面的图标、浏览器右侧插件图标点开的下拉菜单展示的已开启插件的图标、以及插件详情页的标签卡的那个小图标"icons": {"16": "static/img/logo-16.png","19": "static/img/logo-19.png","38": "static/img/logo-38.png","48": "static/img/logo-48.png","128": "static/img/logo-128.png"},//背景页,后台脚本引入,v2是scripts:[xxx,xxx],可以引入多个js文件,v3是service_worker:'xxx',只能引入一个js,v3版最大的改动应该就是这里了,扩展程序管理界面的插件的那个“背景页”也将变成“Service Worker”,改动之后background.js将和浏览器完全分离,即无法调用window和ducoment对象//可以看介绍://1、//developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/#background-service-workers;//2、//developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/"background": {"service_worker": "background.js"},//注入脚本,值是个数组对象,可以有多个对象"content_scripts": [//每个对象代表一个注入的配置{//需要在指定页面注入的js脚本文件"js": ["xxx.js","xxx.js",],//需要注入js脚本文件的指定页面"matches": ["https://*.csdn.net/*","https://*.xxx.com/*"],//不允许注入js脚本文件的指定页面"exclude_matches": ["https://*.xxx.com/*"],//什么时候注入的js脚本,document_start=页面加载开始时,document_end=页面加载结束时"run_at": "document_end"}],//API权限,需要使用某些API时需要设置该API权限才行"permissions": ["contextMenus", //自定义创建右键菜单API"tabs", //tab选项卡API"storage", //缓存API"webRequest", //监听浏览器请求API...],//主机权限,在背景页backgroud.js里面或者popup页面走请求时,请求域名的白名单权限,如果没添加的则请求会失败"host_permissions": ["https://*.csdn.net/*","https://*.xxx.com/*"],//动作API,原文:在 Manifest V2 中,有两种不同的 API 来实现操作: `"browser_action"` 和 `"page_action"` . //这些 API 在引入时扮演了不同的角色,但随着时间的推移它们变得多余,因此在 Manifest V3 中,我们将它们统一为单个 `"action"` API; //配置上action:{},可以是空对象,但是action这个配置得有,不然的话扩展程序管理界面的“Service Worker”将显示无效,//且无法点开“Service Worker”的开发者工具控制台以及点击插件图标时触发的这个方法会报错:chrome.action.onClicked.addListener,"action": {},//通过网络访问的资源,v2是提供一个数组,v3得提供数组对象,每个对象可以映射到一组资源到一组 URL 或扩展 ID"web_accessible_resources": [{//允许访问的资源路径,数组传多个参数"resources": ["*/img/xxx.png", "*/img/xxx2.png"],//允许访问资源的页面"matches": ["https://*.csdn.net/*","https://*.xxx.com/*"]}]
}

项目完整Demo源代码地址

*https://github.com/zhizhuoshuma/my-chromev3-vue-ant-plugins

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...