Chrome插件开发入门(一)

Chrome插件开发入门(一)

0序言

至于Chrome插件,你或多或少可以使用一些比如AdBlock广告拦截插件、著名的脚本管理器插件Tampermonkey(油猴)等。这些连接器为我们的日常工作提供了极大的便利。浏览器使用。那么如何开发自己的插件呢?最近学习了Google的插件开发文档和网上的一些文档,整理了一些开发笔记。由于Google正在推广该插件的V3版本,因此这里将使用最新的V3版本进行研究。

1连接器的结构概述

在开发插件之前,首先需要了解Chrome插件的结构和基础知识。以下是一些基础知识。

1.1Chrome插件的结构

Chrome插件开发入门(一)

alt架构

1.2基本概念

1.2.1宣言

Manifest(manifest.json)是Chrome插件配置文件,类似于前端项目中的webpack.config.js或后端maven项目中的pom.xml。它是一个json文件,应位于插件项目的根目录中,并应命名为manifest.json。清单记录了重要的元数据、定义资源、声明权限并标识哪些文件在后台和页面上运行。下面是一些重要的配置项。所有配置项均可参见官方文档:https://developer.chrome.com/docs/extensions/mv3/manifest/

{

//必填元素

“manifestversion”:3,//版本,V3是chrome插件的最新版本,类似前端node版本或者后端jdk版本

“name”:”MyExtension”,//插件名称

“version”:”1.0.1″,//插件版本

//推荐商品

“action”:{…},//点击图标弹出框,弹出框接受html文件

“description”:”Aplaintextdescription”,//插件的描述

“icons”:{…},//插件图标

//可选(重要,可选并不代表不重要)

“author”:”developer@example.com”,//插件作者

“commands”:{…},//使用命令API添加触发扩展中操作的键盘快捷键

“background”:{…},//ServiceWorker的配置

“contentscripts”:[{…}],//内容脚本设置

“optionspage”:”options.html”,//选项页面配置

“permissions”:[“…”],//插件要使用的权限

“版本名称”:”1.0beta”,

“webaccessibleresources”:[…]//配置Web可访问资源

}

1.2.2ServiceWorker

ServiceWorker是一个事件处理程序,可以侦听浏览器事件,例如导航到新页面、删除书签或关闭选项卡。一旦这些事件被触发,注册在ServiceWorker上的事件处理程序将被调用。需要明确的是,这里的事件是浏览器事件,而不是页面文档上的js事件(例如鼠标点击事件、滑动事件)。ServiceWorker有一个独立的运行时,与js页面运行时隔离,因此它无法访问页面的DOM,而是使用ChromeAPI。

1.2.3内容脚本

ContentScript也称为“内容脚本”。它在网页上下文中运行,可以访问和修改DOM,或者将信息从页面传递到插件的其他部分,例如ServiceWorker和PopupPage。虽然ContentScript运行在网页上下文中,但它与页面引入的js运行环境隔离,意味着它无法访问页面定义的变量和方法。

1.2.4弹出页面

PopupPage也称为“弹出页面”。这是点击插件图标后出现的页面,如下图:

Chrome插件开发入门(一)

它与普通网页非常相似,可以有自己的js和css,但不允许内联js代码。弹出页面与常规网页的区别在于弹出页面的js使用ChromeAPI。,但就像内容脚本一样,它无法访问普通页面的DOM,也无法向普通页面注入js。

1.2.5选项页面

OptionsPage也称为“选项页”。顾名思义,这是插件设置页面。用户可以在此页面配置插件。

首先我们对这些基础知识有一个基本的概念,然后我们会详细讲解如何使用它们并给出相应的演示。

2插件简介

为了让我们能够快速开始开发自己的插件,本节我们将开发一个小插件。这个插件的功能和选词翻译插件类似。用鼠标选择页面上的文本,会出现一个请求框,显示翻译后的内容。我们插件的功能是选择页面上的文本,右键打开选中的文本,无需翻译。效果展示

Chrome插件开发入门(一)

2.1连接器项目的结构

└──来源

├──图标

│└──标志.png

├──manifest.json

└──脚本

├──内容.js

└──库

└──jQuery.js

我们的插件项目结构与Chrome官方项目结构一致:

图标存储插件图标

插件列表manifest.json配置文件

脚本存储内容脚本和依赖库

2.2项目代码

2.2.1manifest.json

{

“清单版本”:3,

“name”:”演示连接”,

“版本”:“1.0.0”,

“description”:”这是一个演示插件”,

“图标”:{

“16”:”/icons/logo.png”,

“32”:”/icons/logo.png”,

“48”:”/icons/logo.png”,

“128”:”/icons/logo.png”

},

“内容脚本”:[

{

“火柴”:[

“https://*/*”,

“http://*/*”,

“文件夹:///*”

],

“js”:[

“脚本/lib/jQuery.js”,

“脚本/content.js”

],

“runat”:“文档空闲”

}

]

}

Manifest.json主要关心配置元素:

manifestversion这是使用的V3版本。

name为插件命名。

图标插件图标。

contentscripts配置内容脚本的执行方式。匹配路径。内容脚本在站点路径页面上运行。js来运行这些内容脚本。需要注意js之间的依赖关系,依赖的js放在前面。这里content.js使用了jQuery,所以jQuery是在content.js之前引入的。Runat脚本注入时间。值包括documentstart、documentend、documententidle,默认为documententidle。documentstart:在构建DOM和运行js页面之前注入。documentend:在构建DOM之后、加载图像和框架之前注入。documentdle:在documentend和window.onload事件之间注入。

2.2.2content.js

/**

*显示提示框

*

*@param{*}鼠标点击事件

*@param{*}显示提示的文本内容

*/

函数showType(e,类型){

$(‘#typeId’).html(类型);

$(‘#tipDiv’).css(‘left’,e.pageX’px’);

$(‘#tipDiv’).css(‘top’,e.pageY10’px’);

$(‘#tipDiv’).css(‘显示’,’块’);

}

/**

*隐藏请求框

*/

函数隐藏提示(){

$(‘#tipDiv’).css(‘显示’,’无’);

}

/**

*初始化事件监听器

*/

函数initEventListeners(){

//监听鼠标按下事件并关闭请求框

文档ument.addEventListener(“鼠标按下”,()>{

隐藏类型();

});

//鼠标点击请求框,防止其关闭

$(‘#tipDiv’).bind(“鼠标按下”,(e)>{

e.stopPropagation();

})

//右键打开选中的内容

document.oncontextmenu(e)>{

//获取选中的内容

constselectedwindow.getSelection().toString();

如果(!选择){

返回真;

}

//显示选中的内容

显示提示(e,选定);

返回假;

}

}

(()>{

//在页面中添加一个提示div(tipDiv),用于打开建议框

$(‘body’).append(“

”)

//style太长,单独设置CSS属性

$(‘#tipDiv’).css(‘background-color’,’浅钢蓝色’);

$(‘#tipDiv’).css(‘字体大小’,’200%’);

//在tipDiv中添加一个内容div,用于放置通知内容

$(‘#tipDiv’).append(“

测试弹出页面”);

//初始化事件监听器

initEventListeners();

})();

content.js的代码注释非常清楚,这里不再重新解释代码。

2.2.3安装插件

Chrome插件开发入门(一)

3总结

本文首先介绍了Chrome插件开发过程中需要的基础知识,然后写了一个简短的demo来讲解如何开发Chrome插件,帮助大家快速上手。后面会有更高级的文章对ContentScript、ServiceWorker、PopupPage等做更多的研究。

© 版权声明

相关文章