写一个Chrome浏览器插件

京东云开发者
• 阅读 262

作者:京东工业 焦丁

一、什么是浏览器插件

浏览器插件是依附于浏览器,用来拓展网页能力的程序。插件具有监听浏览器事件、获取和修改网页元素、拦截网络请求、添加快捷菜单等功能。使用浏览器插件可以实现很多有趣的功能。

写一个Chrome浏览器插件

二、浏览器插件有哪些种类

•以chromium为内核的浏览器插件如Chrome

•firefox浏览器插件

•safari浏览器插件

本文只介绍Chrome插件的原生开发流程。

三、插件目录介绍

写一个Chrome浏览器插件

a的文件名 文件介绍
manifest 核心配置文件,配置插件平台版本、名称、权限、Aicon、Api权限、host权限等。
popup.html 插件弹出页面,原生html、css页面。
popup.js 插件页面的脚本文件。
popup.css 插件页面的样式文件
background.js 后台文件,可以监听浏览器事件,在浏览器后台持续运行。
content.js 插入到页面中的js脚本,可以监听DOM事件,操作DOM元素。

四、开始写一个插件

1. 配置manifest。

以下是一个基础的manifest配置

写一个Chrome浏览器插件

2. 写一个插件的弹框界面popup.html

和写html页面一样,在body里面写元素,但是需要注意样式文件popup.css和脚本文件popup.js需要外部引入。

写一个Chrome浏览器插件

3. 写一个插件弹框界面的样式文件popup.css。

4. 写一个插件弹框界面的脚本文件popup.js。

脚本文件的主要作用在于响应插件弹窗的行为事件,并发送消息给内容脚本或者后台脚本。

以下代码是在popup.js中,监听id为tag元素的点击事件,获取当前窗口active标签页,并给此标签页推送一个message。

写一个Chrome浏览器插件

4. 写一个插件的内容脚本content.js

content.js会被插入到网页环境中,用于监听浏览器事件,读取和操作DOM元素。

以下代码是监听页面load事件,和接收来自第三步中send的message。


window.addEventListener("load", function () {
    // 监听页面load事件
})

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
 console.log("-----------");
 if (request.greeting === "tag") {
    console.log(request.greeting)
 }
});

5. 写一个插件的后台脚本background.js

后台脚本会在浏览器窗口打开期间持续运行,监听浏览器事件,网络请求等。

以下代码是浏览器屏蔽漏某些url请求的实现。

写一个Chrome浏览器插件

把上述的几个文件创建完成之后就实现了一个简单的插件,然后直接安装到浏览器扩展即可。



五、解释几个消息发送和接收的Api

1. 获取指定的浏览器标签页:

chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {})

2. 向指定标签页中的内容脚本发送一条消息,其中包含在发送回响应时运行的可选回调函数。在当前扩展程序的指定标签页中运行的每个内容脚本中都会触发 runtime.onMessage 事件。

chrome.tabs.sendMessage(tabs[0].id, { greeting: "tag-remove" }, function (response) { console.log(response); });

3. 向扩展程序或其他扩展程序/应用中的事件监听器发送一条消息。请注意,扩展程序无法使用此方法向内容脚本发送消息。如需向内容脚本发送消息,请使用

chrome.runtime.sendMessage(  extensionId?: string,  message: any,  options?: object,  callback?: function,)

4. onMessage,通过扩展程序进程(通过 runtime.sendMessage)或内容脚本(通过 tabs.sendMessage)发送消息时触发。

chrome.runtime.onMessage.addListener(  callback: function,)

想了解其他浏览器插件Api,请点击跳转

六、接下来让我们丰富插件的能力

1. 实时删除页面上的元素,我们经常会遇到一些烦人的广告,删掉他。广告一般都是有固定的元素节点的,找到元素节点的class或者id,按以下处理。

百度一下页面举例,以下代码实时监听网页元素,发现class为s-p-top的元素后就会删除改元素,这里我给被删除元素的位置加了一个红色边框用来测试,实际使用中可以删除添加红框的代码。

在content.js中添加以下代码:

写一个Chrome浏览器插件



通过下面两个图对比可以看出使用插件后百度图片被删除了:

写一个Chrome浏览器插件 写一个Chrome浏览器插件

2. 有人不习惯点开右上角插件再点击功能按钮,怎么办呢,简单,给浏览器右键菜单添加快捷键。

以下代码为添加浏览器右键菜单的快捷键,并监听菜单点击事件,可在menu2中发起请求。

在background.js中:

写一个Chrome浏览器插件

效果如下: 写一个Chrome浏览器插件

3. 还是拦截广告,广告可能出现在iframe中,但是呢我不想使用删除DOM的方式,怎么办呢,那就直接拦截网络请求。

在background.js中:

写一个Chrome浏览器插件



我们还以baidu.com为例,在MDN中测试,修改iframe src的值为baidu.com.

使用插件前结果如下:

写一个Chrome浏览器插件

使用插件后结果如下,可以发现iframe中没有渲染baidu.com,并且在network中可以看到baidu.com被屏蔽了: 写一个Chrome浏览器插件

  1. 自定义一个自己的新开页

两步走

第一步:在manifest中定义newtab(就是一个html文件,这个文件会覆盖原生的浏览器新开页)

写一个Chrome浏览器插件

第二步:创建newtab.html文件,可以在这个文件定义新开页的样式和js,且此样式文件和js文件不用添加到content_scripts中

写一个Chrome浏览器插件

效果如下 写一个Chrome浏览器插件



5. 标记页面文本

在阅读网页文档时,经常会想标记一些重点文本,可以直接用扩展来实现:

在background.js中:

写一个Chrome浏览器插件

在content.js中:

写一个Chrome浏览器插件

效果:

写一个Chrome浏览器插件

功能先丰富到这里,后面再继续补充~ 写一个Chrome浏览器插件

七、参考文档

chrome扩展参考文档

chrome Api文档

manifest权限配置文档

点赞
收藏
评论区
推荐文章
不才 不才
3年前
从输入URL到页面渲染完成
从输入URL到页面渲染完成涉及网络、浏览器工作原理等知识。前序知识浏览器进程结构textBrowser进程负责协调、主控,包括地址栏、书签、历史栈。GPU进程负责整个浏览器界面的渲染网络进程负责发起接收网络请求插件进程控制网页中使用到的插件如flash渲染器进程默认使用(Processpersiteinstance)模式四种
李异 李异
2年前
浏览器自带起始页的完美替代者:Wetab新标签页
不知道现在大家是使用浏览器自带的起始页,还是都安装了各种各样的新标签页插件?为什么要使用新标签页插件?众所周知,浏览器自带的起始页功能比较单一。就拿谷歌浏览器举例,虽然界面简洁,但是只有快捷方式和搜索框。只有少量图标还好,一旦添加过多,整个
想天浏览器 想天浏览器
2年前
想天浏览器3.2正式版推送更新
快来看更新!经过我们一个多月的努力开发,想天浏览器3.2正式版推送更新啦。    图片下方是本次更新的主要内容↓↓浅色模式3.2改进的深色模式新增内容1.兼容插件机制插件的crx形式安装插件的解压包形式安装插件的工具栏展示与否设置插件的启用禁用chrome商店安装到想天浏览器,同时支持下载
徐小夕 徐小夕
3年前
30分钟开发一款抓取网站图片资源的浏览器插件
前言由于业务需求,笔者要为公司开发几款实用的浏览器插件,所以大致花了一天的时间,看完了谷歌浏览器插件开发文档,在这里特地总结一下经验,并通过一个实际案例来复盘插件开发的流程和注意事项.你将收获如何快速上手浏览器插件开发浏览器插件开发的核心概念浏览器插件的通信机制浏览器插件的数据存储浏览器插件的应用场景开发一款抓取网站图片资源
Easter79 Easter79
3年前
TamperMonkey 使用指南以及脚本推荐
写在前面Chrome浏览器是最适合开发者使用的浏览器,不仅仅是因为Chrome对于Js的友好支持,更是由于Chrome支持丰富且功能强大的插件,扩展了浏览器的功能和使用体验。在这些插件里面,相信你一定使用过TamperMonkey(https://www.oschina.net/action/GoToLink?urlht
Stella981 Stella981
3年前
Chrome 离线安装插件的办法
Chrome离线安装插件的办法首先,可以再地址栏输入chrome:version查看自己浏览器版本如何解决Chrome67以后版本,无法离线安装插件的问题首先,可以再地址栏输入 chrome://version/查看自己浏览器版本!(https://oscimg.oschina.net/oscnet/
李异 李异
2年前
这4款插件让你的Chrome和edge浏览器更好用,提升你的使用体验
浏览器是大多数人每天都要打交道的东西,使用了这么久的浏览器,用过的插件也有不少。纵观我使用过的插件,给大家推荐4个我平时用得最多,我也猜想是大家都比较需要的功能的插件。一、Wetab新标签页平时我们一打开浏览器见到的就是新标签页,一个好看且方
想天浏览器 想天浏览器
2年前
想天浏览器:推荐几款好用的桌面浏览器
1:想天浏览器基于Chromium内核,一款团队协作与浏览器结合的桌面浏览器,支持全局搜索;云端标签分组空间;团队的创建、显示,同步创建一个团队沟通群聊与社区圈子;下载助手;;支持消息中心;标签组管理功能;密码管理功能;用户脚本管理;强大的导航管理;DIY桌面功能等丰富的功能,不仅如此想天浏览器还有很多实用的插件,可以帮助你拦截广告、翻译网页等,为你带来高效
专注IP定位 专注IP定位
1年前
划词搜索IP插件
插件背景浏览器插件可以让用户根据个人工作及日常需求来定制浏览器的功能和界面。当用户在网页上看到一些IP地址时,或许会好奇它们的来源和归属。传统的做法是,用户需要复制这个IP地址,然后跳转到埃文科技旗下的http://IPUU.net网站进行查询。这个过程虽
API 小达人 API 小达人
1年前
5分钟上手 浏览器插件测试——Eolink Apikit
EolinkApikit研发管理和自动化测试产品中,提供了多种发起API测试的方式,包括浏览器插件测试。通过EolinkApikit官方浏览器插件发送请求,需要安装Chrome或者Firefox插件,可访问本地服务器(localhost)、内网、局域网。