手摸手教你写个chrome插件

2023-11-10 07:30
文章标签 插件 chrome 写个 摸手

本文主要是介绍手摸手教你写个chrome插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  1. 需求分析
  2. 官网Demo入门
  3. Manifest配置文件
  4. 实现思路
  5. 核心代码
  6. 实现效果

不知道大家有没有过类似的经历,查阅资料时经常会打开一堆临时tab标签,不至于到要加入收藏夹的地步,但是直接关了再找又麻烦,而且挤挤挨挨的一堆找起来也很费眼睛…

密密麻麻的tab标签页

有没有什么工具能保存下我打开的tab,并且能方便地查看?

受到印象笔记剪藏插件的启发,我找到了个插件OneTab,可以一键关闭所有标签页并保存到一个页面中:

OneTab

出于好奇,我去了解了下:如何写一个chrome插件?

再次打开一堆tab…

写一个chrome插件需要的技术基础:html、js、css

???就这?这不就是我前端切图仔的三板斧吗?!

话不多说,直接开撸!

需求分析

首先分析我的需求:

  1. 保存打开的网页地址;
  2. 看完后可以便捷地删除;
  3. 最好能一键全部保存;
  4. 再来个一键删除;
  5. 再来个一键全开;

打住打住,先完成核心需求再说= =。

官网Demo入门

依据官网上的指示,插件应包含以下文件:

  • 一个manifest文件(配置文件)
  • 一个或多个HTML文件(除非这个应用是一个皮肤)
  • 可选的一个或多个JavaScript文件
  • 可选的任何需要的其他文件,例如图片

除了manifest不知道是啥,其他都是熟悉的配方。谷歌官方还很贴心地给出了入门demo:https://storage.googleapis.com/chrome-gcs-uploader.appspot.com/file/WlD8wC6g8khYWPJUsQceQkhXSlv1/SVxMBoc5P3f6YV3O7Xbu.zip

下载下来后可以看到有这么几个文件:

getting-started目录

打开chrome,右上角扩展操作>更多工具>扩展程序,点击加载已解压的扩展程序,选中上面的文件夹,就可以看到加载进来的demo插件。

加载插件

已加载进来的demo插件

Manifest配置文件

我们先来看看demo里的manifest.json配置:

{"name": "Getting Started Example","description": "Build an Extension!","version": "1.0","manifest_version": 3,"background": {"service_worker": "background.js"},"permissions": ["storage", "activeTab", "scripting"],"action": {"default_popup": "popup.html","default_icon": {"16": "/images/get_started16.png","32": "/images/get_started32.png","48": "/images/get_started48.png","128": "/images/get_started128.png"}},"icons": {"16": "/images/get_started16.png","32": "/images/get_started32.png","48": "/images/get_started48.png","128": "/images/get_started128.png"},"options_page": "options.html"
}
配置说明
参数说明
name插件名称
description插件描述
version插件版本号
manifest_version清单文件的版本(目前是3,按照官方的来就可以)
background后台默认程序,版本3使用service_worker替代了之前的scripts,主要作用是管理缓存、预加载资源和启用离线网页。
permissions需要的权限
actiontoolbar扩展菜单配置
icons插件图标(可以适配不同的尺寸)
options_page扩展程序选项(一般是让用户自定义选择插件的某些参数值)

其中,

  • 本次需要的permissions有:
    • tabs:访问tab页;
    • storage:存取缓存;
    • unlimitedStorage:无限缓存。
      更多权限配置说明见官网:https://developer.chrome.com/docs/extensions/mv2/declare_permissions/#manifest
  • action这里我用的是清单版本2中的browser_action,版本3中的action无法弹出popup选项卡,估计是我用的姿势不太对…(有知道的童鞋可以留言告诉我怎么用~)

修改后的配置文件:

{"manifest_version": 3,"name": "阅读TODO清单","version": "1.0.0","description": "一键保存tab,轻松管理临时标签页","icons":{"16": "images/icon.png","48": "images/icon.png","128": "images/icon.png"},"browser_action":{"default_icon": "images/icon.png","default_title": "阅读清单-by 游走走","default_popup": "popup.html"},"permissions":["tabs","storage","unlimitedStorage"],"options_page": "options.html","homepage_url": "https://github.com/youzouzou/my-chrome-plugin-read-todo"
}
  • homepage_url:扩展程序网站,这里指向了我的github开源地址:)

实现思路

TODO清单这种小玩意儿就不多说了,简单来讲就是维护一个数组,并通过本地缓存get/set来实现增删改查。

核心代码

popup插件选项卡

讲完了配置,接下来就是我们熟悉的html/js/css三板斧了。

popup.html里我定义了三个按钮:加入阅读清单查看清单加入所有打开tab

<div id="addBtn">加入阅读清单</div>
<div id="viewBtn">查看清单</div>
<div id="addAll">加入所有打开tab</div>

监听按钮点击事件:

const addBtn = document.getElementById("addBtn")
addBtn.addEventListener("click", async () => { });
加入阅读清单

加入阅读清单是将当前tab的url和title保存到缓存数组中,这里就涉及到3个chrome的API。

  1. 获取当前tab的url和title
chrome.tabs.getSelected(null, function (tab) {console.log(tab.url, tab.title)
});
  1. 获取当前缓存的tab数组
chrome.storage.sync.get("tabs", ({ tabs }) => { });
  1. 更新缓存中的tab数组
chrome.storage.sync.set({ "tabs": newTabList });
查看清单
viewBtn.addEventListener("click", async () => {window.open(chrome.extension.getURL('list.html'));
});

这里会打开一个新的tab页,指向的是list.html文件。我在这个页面展示了缓存的tab数组,并提供了单个url打开/删除、一键全部打开/删除的功能。

加入所有打开tab

这里和加入单个tab差不多,只不过需要多调一个API来获取所有窗口的所有tab:

chrome.windows.getAll({ populate: true }, function (windows) {windows.forEach(function (window) {window.tabs.forEach(function (tab) {// 遍历到所有tab});});
});

核心代码基本就是这几个API,具体实现可以参照demo:https://github.com/youzouzou/my-chrome-plugin-read-todo

感兴趣的同学可以下载demo,加载已解压的扩展程序,就可以看到具体的实现效果。打包成.crx文件也很简单,打开扩展程序,点击打包扩展程序

打包扩展程序

还可以注册开发者账号,将开发好的插件上传到chrome网上应用商店供其他用户购买和下载(发家致富的路子又多了一个有木有~)。

实现效果

chrome插件展示

左键点击toolbar中的插件

右键点击toolbar中的插件

注:这里的阅读TODO清单指向的就是homepage_url选项指向的就是options_page

查看清单

总结

功能比起OneTab是要简陋得多,不过通过这次尝试,打开了我新世界的大门,以后解决问题的思路又多了一种√。

这篇关于手摸手教你写个chrome插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381236

相关文章

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

python写个唤醒睡眠电脑的脚本

《python写个唤醒睡眠电脑的脚本》这篇文章主要为大家详细介绍了如何使用python写个唤醒睡眠电脑的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 环境:win10python3.12问题描述:怎么用python写个唤醒睡眠电脑的脚本?解决方案:1.唤醒处于睡眠状

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

mybatis框架基础以及自定义插件开发

文章目录 框架概览框架预览MyBatis框架的核心组件MyBatis框架的工作原理MyBatis框架的配置MyBatis框架的最佳实践 自定义插件开发1. 添加依赖2. 创建插件类3. 配置插件4. 启动类中注册插件5. 测试插件 参考文献 框架概览 MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射,为开发者提供了极大的灵活性和便利性。以下是关于M