一、效果预览

二、项目回顾

1、原理

主要是利用js脚本在页面打开前插入一个背景图片容器,在通过相应的事件控制来实现该功能。

2、功能

将网络图片设置为浏览器背景

3、使用

下载插件 --> 修改js文件(加入图片链接)–》 添加浏览器扩展 --> 刷新页面

4、局限

只能使用网页图片链接作为背景图片,修改背景图片需要频繁修改代码。

5、旧版本记录

旧版本开发详情可以查看该博客:自制浏览器网页背景是什么体验?

三、项目优化

1、背景图片选择

之前只能使用在线链接来设置背景图片,现在增加了多一种设置,可以将本地图片设置为背景图片,具体操作如下:

(1)点击页面插件小图标

(2)在插件页面上有个上传文件按钮,点击可以上传本地文件

这一点的优化改造主要是修改了图片文件的存放位置,由原来的本地js文件修改为浏览器的indexedDB数据库,选择indexedDB也是经过实践得出的方案。

(1)图片存放位置

浏览器缓存主要有以上几种,刚开始改造的时候我选择了localStorage,因为localStorage操作比较方便,一开始改造完还一度觉得很不错,知道后来,我上次了4,5张图片之后发现上传失败了,localStorage的缓存已经达到上限,所以后来才重新改成了使用indexedDB来代替localStorage。

(2)indexedDB数据库特点

该数据库主要有以下特点:

  • ① 非关系型数据库(NoSql)

我们都知道MySQL等数据库都是关系型数据库,它们的主要特点就是数据都以一张二维表的形式存储,而Indexed DB是非关系型数据库,主要以键值对的形式存储数据。

  • ② 持久化存储

cookie、localStorage、sessionStorage等方式存储的数据当我们清楚浏览器缓存后,这些数据都会被清除掉的,而使用IndexedDB存储的数据则不会,除非手动删除该数据库。

  • ③ 异步操作

IndexedDB操作时不会锁死浏览器,用户依然可以进行其他的操作,这与localStorage形成鲜明的对比,后者是同步的。

  • ④ 支持事务

IndexedDB支持事务(transaction),这意味着一系列的操作步骤之中,只要有一步失败了,整个事务都会取消,数据库回滚的事务发生之前的状态,这和MySQL等数据库的事务类似。

  • ⑤ 同源策略

IndexedDB同样存在同源限制,每个数据库对应创建它的域名。网页只能访问自身域名下的数据库,而不能访问跨域的数据库。

  • ⑥ 存储容量大

这也是IndexedDB最显著的特点之一了,这也是不用localStorage等存储方式的最好理由。

(3)indexedDB数据库使用

本次主要使用到了一下几个方法:

  • ① 创建或连接数据库
/*** 打开数据库* @param {object} dbName 数据库的名字* @param {string} storeName 仓库名称* @param {string} version 数据库的版本* @return {object} 该函数会返回一个数据库实例*/
function openDB(dbName, version = 1) {return new Promise((resolve, reject) => {//  兼容浏览器var indexedDB =window.indexedDB ||window.mozIndexedDB ||window.webkitIndexedDB ||window.msIndexedDB;let db;// 打开数据库,若没有则会创建const request = indexedDB.open(dbName, version);// 数据库打开成功回调request.onsuccess = function (event) {db = event.target.result; // 数据库对象console.log("数据库打开成功");resolve(db);};// 数据库打开失败的回调request.onerror = function (event) {console.log("数据库打开报错");};// 数据库有更新时候的回调request.onupgradeneeded = function (event) {// 数据库创建或升级的时候会触发console.log("onupgradeneeded");db = event.target.result; // 数据库对象var objectStore;// 创建存储库objectStore = db.createObjectStore("signalChat", {keyPath: "sequenceId", // 这是主键// autoIncrement: true // 实现自增});// 创建索引,在后面查询数据的时候可以根据索引查objectStore.createIndex("link", "link", { unique: false }); objectStore.createIndex("sequenceId", "sequenceId", { unique: false });objectStore.createIndex("messageType", "messageType", {unique: false,});};});
}
  • ② 新增数据
/*** 新增数据* @param {object} db 数据库实例* @param {string} storeName 仓库名称* @param {string} data 数据*/
function addData(db, storeName, data) {var request = db.transaction([storeName], "readwrite") // 事务对象 指定表格名称和操作模式("只读"或"读写").objectStore(storeName) // 仓库对象.add(data);request.onsuccess = function (event) {console.log("数据写入成功");};request.onerror = function (event) {console.log("数据写入失败");};
}
  • ③ 通过主键读取数据
/*** 通过主键读取数据* @param {object} db 数据库实例* @param {string} storeName 仓库名称* @param {string} key 主键值*/
function getDataByKey(db, storeName, key) {return new Promise((resolve, reject) => {var transaction = db.transaction([storeName]); // 事务var objectStore = transaction.objectStore(storeName); // 仓库对象var request = objectStore.get(key); // 通过主键获取数据request.onerror = function (event) {console.log("事务失败");};request.onsuccess = function (event) {console.log("主键查询结果: ", request.result);resolve(request.result);};});
}
  • ④ 更新数据
/*** 更新数据* @param {object} db 数据库实例* @param {string} storeName 仓库名称* @param {object} data 数据*/
function updateDB(db, storeName, data) {var request = db.transaction([storeName], "readwrite") // 事务对象.objectStore(storeName) // 仓库对象.put(data);request.onsuccess = function () {console.log("数据更新成功");};request.onerror = function () {console.log("数据更新失败");};
}

2、增加快捷键切换功能

之前只能通过页面上的按钮来进行背景切换控制,现在加入了键盘快捷键设置,可以设置自己喜好的快捷键方式来进行背景切换,具体设置的位置如下图:

3、插件弹出框修改

删除了原来界面的按钮,增加了背景图片列表预览、上传图片和删除图片的功能,具体页面如下:

  • 文件上传

点击选择文件可以上传图片。

  • 删除图片

点击图片会弹出删除框,点击删除即可删除图片。

4、使用

(1)下载代码

目前代码主要放在Gitee上,后续再同步到GitHub上,喜欢的朋友们可以来个star。

Gitee:https://gitee.com/zheng_yongtao/chrome-plug-in.git

具体文件夹如下:

(2)拖入浏览器扩展

浏览器地址输入:chrome://extensions/

开启开发者模式,直接将文件夹拉进去即可

(3)页面使用

页面上点击插件小图标,找到背景切换插件,点击即可使用。

四、参考文章

前端本地存储数据库IndexedDB完整教程

五、更多插件

浏览器网页背景换肤插件
浏览器桌面挂件动画插件
B站视频评论屏蔽插件
鼠标点击烟花效果,妹子看后直说酷
将B站视频设置为浏览器背景

(新)Chrome浏览器自定义背景插件相关推荐

  1. Chrome浏览器截屏插件的开发

    目 录 第一章 绪论 1 1.1选题背景及意义 1 1.2发展现状研究 2 1.2.1浏览器简介 2 1.2.2 浏览器发展历程 2 1.2.3 浏览器分类 3 1.2.4 chrome浏览器简介 3 ...

  2. Flash正式成为Googel Chrome浏览器内置插件

    3月30日,Google Chrome浏览器官方博客宣布Flash正式成为Google Chrome浏览器内置插件.从此,Flash将随同Google Chrome的版本同时发布,并且附带自动更新功能 ...

  3. 如意报表插件如何安装_Google Chrome浏览器如何安装插件应用

        首先提前庆祝中华人民共和国成立七十周年!     顺祝各位国庆快乐! 浏览器插件应用是基于浏览器并且给浏览器增加功能的相对于浏览器系统的软件,说起浏览器插件应用怎么牛逼,怎么好玩,怎么有用,如 ...

  4. 谷歌Chrome浏览器无法安装插件的解决方法

    谷歌Chrome浏览器无法安装插件的解决方法 参考文章: (1)谷歌Chrome浏览器无法安装插件的解决方法 (2)https://www.cnblogs.com/liweis/p/10122989. ...

  5. chrome浏览器广告屏蔽插件adblock

    chrome浏览器广告屏蔽插件adblock下载地址: https://downloads.adblockplus.org/devbuilds/adblockpluschrome/ 安装: chrom ...

  6. Google Chrome浏览器如何安装插件应用

    浏览器插件应用是基于浏览器并且给浏览器增加功能的相对于浏览器系统的软件,说起浏览器插件应用怎么牛逼,怎么好玩,怎么有用,如果下载不到或者不会安装,其他都是空谈,我们今天就从这里开始,给入门小白的,老司 ...

  7. 开源Chrome浏览器网络代理插件:Retween

    Retween是一个Chrome浏览器网络代理插件. 开源地址:Retween开源地址

  8. Chrome浏览器必装插件!尤其程序猿!

    Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是 Chrome 浏览器被众多爱好者钟爱的原因吧. 言归正传,今天来给大家推荐 10 款我自己珍藏的 Chrom ...

  9. Chrome浏览器标签管理插件–OneTab

    工作或学习中,当我们在浏览器中打开太多页签时,各个页签就会紧凑的挤到一块,切换不同的页签时,根本就不知道哪一个是要点开的网页,非常头疼! 今天为大家推荐一款非常好用的 Chrome 浏览器网页标签管理 ...

最新文章

  1. 21、C#里面类的创建和使用
  2. 移植 Python 量化交易 TA-Lib 库到函数计算
  3. 来自技术人的呐喊:回归本心,远离内卷
  4. linux shell之字符串的更具字符分割和删除字符和文本内容的删除以及内容是否匹配成功
  5. jQuery的无new实例化
  6. 资金严重短缺 法拉第未来把洛杉矶总部都卖了
  7. Linux 堆分析,堆排序的分析及实现
  8. 苹果自带的清理软件_为大家推荐几款苹果电脑清理软件中排名较高的软件
  9. 2003服务器安全策略
  10. Docker安装及使用
  11. java深度模仿支付宝订单号/交易流水号(高性能,不重复)
  12. 关联规则与强关联规则计算
  13. Windows下安装Nexus私服及更新索引
  14. python entry_tkinter常用控件演示(Entry)
  15. 【if 的高阶用法练习题】if only / I wish
  16. Akka(二):使用Akka模拟yarn
  17. Altium Designer生成Gerber文件的设置(嘉立创建议 )
  18. yiui易柚7 是Android什么版本,康佳YIUI易柚操作系统
  19. Neat Download Manager(ndm下载器)
  20. 今日报错系列:没有找到 或上一个增量链接没有生成它;正在执行完全链接

热门文章

  1. 形象解释清了内存颗粒、单双面、主板布线和双通道的那些事儿
  2. 使用JS-SDK自定义微信分享效果
  3. 在windows下安装pyLint,对python进行语法检查
  4. 代码跳转路由报错_vue路由报错Navigating to current location (/login) is not allowed踩坑总结...
  5. 微信小程序canvas把正方形图片绘制成圆形
  6. 游戏编程笔记-起步(一)一个简单的游戏-贪吃蛇
  7. 再次推荐台湾电影《国士无双》_原水_新浪博客
  8. 001一种儿童癫痫发作的非通道广义癫痫检测方法-2021
  9. widows批处理精选
  10. 零信任能彻底解决邮件安全难题