浏览器插件官方demo学习(五):键盘快捷键、数据缓存、网络请求监听

news/2024/4/30 3:24:43/文章来源:https://blog.csdn.net/weixin_41897680/article/details/130181005

键盘快捷键

这个demo主要是介绍了,通过自定义键盘快捷键的方式来触发扩展。

  • 必须要在manifest.json文件中添加commands属性
  • 组合键:使用组合键时必须包含 CtrlAlt

细节不介绍,可以自行查看官方文档。这里只看一下常用的东西。

定义组合键

"commands": {"execute_action": {"suggested_key": {"windows": "Ctrl+Shift+F","mac": "Command+Shift+F",},"description": "这是一个触发扩展的快捷键","global": false}}

execute_action:快捷键名称,必填
suggested_key:检验的快捷键,用于设置不同的平台,必填
description:快捷键描述,必填
global:是否允许在 Chrome 以外的环境使用快捷键,默认为 false

在后台页面(background.js)里进行监听

chrome.commands.onCommand.addListener(function (command) {console.log(command)
});

在这里插入图片描述

数据缓存

chrome.storage.local是一个用来存储数据的API,它可以让你在Chrome扩展中保存和读取对象。 它和localStorage 类似,但是有一些区别:

  • chrome.storage.local可以保存任何类型的数据,而localStorage只能保存字符串类型的数据。
  • chrome.storage.local可以在不同的上下文中共享数据,例如background.jspopup.html,而localStorage只能在同一个网页中访问数据。
  • chrome.storage.local有一个存储限制,一般是5MB,除非你申请了unlimitedStorage权限,而``localStorage`的存储限制取决于浏览器和网站。
  • chrome.storage.local是异步的,需要使用回调函数来处理结果,而localStorage是同步的,可以直接返回结果。

可以使用chrome.storage.local.set方法来保存数据,使用chrome.storage.local.get方法来读取数据,使用chrome.storage.local.remove方法来删除数据。还可以使用chrome.storage.onChanged事件来监听数据的变化

网络请求监听

v3版本中,chrome.webRequest API的部分功能被限制或者废弃了,取而代之的是declarativeNetRequest AP
这个API允许扩展以更少的权限和更高的性能来阻止或者修改网页内容。可以使用这个API来定义一些规则,来匹配和处理网络请求

  • 首先需要在 manifest.json 声明权限,并指定一个规则文件
"permissions": ["declarativeNetRequest","declarativeNetRequestFeedback"
],
"declarative_net_request": {"rule_resources": [{"id": "ruleset_1","enabled": true,"path": "js/rules.json"}]
},

declarativeNetRequestFeedback 这个也需要进行声明,否则在background.js里无法使用chrome.declarativeNetRequest.onRuleMatchedDebug.addListener进行监听
当浏览器进行的网络请求符合定义的规则时会触发该事件

// 监听declarativeNetRequest.onRuleMatchedDebug事件并打印URL
chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(function (details) {// 打印图片的URLconsole.log(details.request.url);}
);
  • 定义规则
[{// 规则的唯一值"id": 1, // 规则的优先级"priority": 1,// 如果此规则匹配,则将要采取的操作"action": {"type": "redirect",  // 类型,常见的有 redirect(重定向)、block(阻塞)、allow(允许)"redirect": {"url": "https://example.com"}},	//触发此规则的条件"condition": {// 这里使用resourceType条件来匹配图片请求// 可以根据需要修改为其他条件,常见的有 stylesheet(样式脚本)、script(js脚本)、image(图片)、font(字体)、media(媒体)、websocket(web socket)"resourceTypes": ["media"],// 这里使用urlFilter条件来匹配所有URL// 可以根据需要修改为其他条件"urlFilter": "*"}}
]

上面这个规则是用来监听媒体资源请求的,可以看见打印出了两条链接。基于此其实就可以写一个简单的视频下载插件,当然只针对简单的视频网站,大部分视频网站都是以视频流的形式进行请求,甚至进行文件加密。常见的视频流是m3u8格式,将视频流下载后再进行转换,比如qq浏览器和夸克浏览器都有这样的功能。

在这里插入图片描述
关于网络请求常用的知识点不多,关于其他内容可以自行查看官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_289562.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++STL精讲】优先级队列(priority_queue)与双端队列(deque)

文章目录 💐专栏导读💐文章导读🌷优先级队列——priority_queue🌸什么是优先级队列?🌸优先级队列的基本使用🌸什么是仿函数?🌸优先级队列的模拟实现 🌷双端队…

vue element-ui web端 引入高德地图,并获取经纬度

发版前接到一个临时新需求 ,需要在web端地址选择时用地图,并获取经纬度。 临阵发版之际加需求,真的是很头疼,于是赶紧找度娘,找api。 我引入的是高德地图,首先要去申请key , 和密钥,…

20230420使用逻辑分析仪测量摄像头的PAG7920的时钟信号

20230420使用逻辑分析仪测量摄像头的PAG7920的时钟信号 2023/4/20 19:14 在CV1826平台: 1、vsync信号:刷新率120HZ PAG7920LT: Ultra-Low Power Global Shutter Image Sensor Max. Frame Rate 180 FPS 20KSa/20KHZ 2、href行同步信号:KHZ级别…

Vulnhub项目:JANGOW 1.0.1

靶机地址:Jangow: 1.0.1 ~ VulnHub 渗透过程: kali ip:192.168.56.104,使用arp-scan -l查看到靶机ip192.168.56.118 对靶机进行端口探测,发现了21、80端口 访问80端口,发现site目录 点击进去后&#xff0…

【Linux】使用systemd设置开机自启动命令

目录 1 使用使用systemd实现开机自动运行命令1.1 新建一个.service文件1.2 编写.service文件1.2.1 [Unit]1.2.2 [Service]1.2.3 [Install] 1.3 启动服务并设置自启动 2 编写Systemd服务文件的要点2.1 Systemd服务文件的位置2.2 Systemd服务文件的格式2.3 Systemd服务文件的基本…

Spring事务(3)-TransactionInterceptor实际事务执行

Spring事务(2)-EnableTransactionManagement实现源码解析 中介绍了Spring事务开启和代理的实现,现在了解实际事务执行TransactionInterceptor。 TransactionInterceptor TransactionInterceptor类图 MethodInterceptor:AOP代理后…

IDEA社区版搭建Tomcat服务器并创建web项目

IDEA社区版搭建Tomcat服务器并创建web项目 目标 创建Web项目的目录结构可以启动Tomcat服务器编写Servlet并访问成功 问题 IDEA社区版没有创建Web工程的选项IDEA社区版没有Tomcat插件 实现步骤 针对以上两个问题,分步解决 问题一:IDEA社区版没有创建…

深入认识VirtualPrivateNetwork

目录 一、认识什么是认证? 1.什么是数据认证,有什么作用,有哪些实现的技术手段? 2.什么是身份认证,有什么作用,有哪些实现的技术手段? 二、认识什么是VPN 1.什么VPN技术? 2.VPN技术有哪些分类? 3.IPSEC技术…

我的Qt作品(18)模仿Qt Creator IDE写了一个轻量级的视觉框架

Qt Creator的源码比较庞大。前几年我陆陆续续读过里面的源码。也写了几篇博文: https://blog.csdn.net/libaineu2004/article/details/104728857 https://blog.csdn.net/libaineu2004/article/details/89407333 最近一直想找机会,借用这个IDE的皮&…

mapreduce基础: 手写wordcount案例

文章目录 一、源代码二、运行截图 一、源代码 WordCountMapper类 package org.example.wordcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper;impo…

DNS服务器配置与使用【CentOS】

从本质上说,DNS是一个分布数据库,是一个树形结构(不是网状)——层次结构 DNS查找过程就是 回溯的过程(递归、迭代) www.xxx.edu.cn(属于四层结构) 查询DNS:域名到IP地址的…

【Maven 入门】第二章、Maven核心程序解压与配置

一、Maven 官网地址 首页: Maven – Welcome to Apache Maven(opens new window) 下载页面: Maven – Download Apache Maven(opens new window) 本文以maven-3.3.8为例 具体下载地址:https://dlcdn.apache.org/maven/maven-3/3.8.8/bina…

Linux学习记录—— 이십일 进程间通信(3)信号量和消息队列

文章目录 1、消息队列2、信号量1、了解概念2、信号量理解 3、接口4、理解IPC 1、消息队列 两个进程ab之间系统维护一个队列结构,a进程往队列里放信息,信息编号为1,b进程往队列里放信息,信息编号为2;之后开始读取数据的…

OrCAD原理图检查

OrCAD原理图检查 FPGA或处理器芯片原理图封装检查OrCad元件Part Reference与Reference位号不同检查所有器件是否与CIS库元件匹配用CIS库中的元器件替换已存在器件方法1方法2 DRC检查修改页码Annotate重排位号利用Intersheet References功能进行off-page索引检查封装、厂家、型号…

追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序

追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~😎 前言🙌堆的应用 —— 堆排序算法:堆排序算法源代码分享运行结果测试截图: 总结撒花💞 😎博客昵称:博客小梦 &#x1f60…

安装配置 JupyterLab ubuntu20.04

目录 ​编辑 (1)安装 (2)配置 (1)生成配置文件 (2)生成jupyterlab的登录密码 (3)修改 jupyter 的配置文件 (4)安装 jupyterlab…

leetcode每日一题——美团笔试题【1】

今天分享两道算法题,自己刚开始练习,可能在解法上不是最佳的,但是只提供一些自己的思路,欢迎大家多多指教~ 第一题 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1:输入: s "lee…

算法的时间复杂度和空间复杂度(2)

计算斐波那契递归Fib的时间复杂度&#xff1f; long long Fib(size_t N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2); } 因为递归先递推后回归&#xff0c;看起来规律像等比数列&#xff0c;也可以用错位相减法&#xff0c;因为斐波那契数列到第二项就不会再计算了&a…

【Spring Boot】SpringBoot设计了哪些可拓展的机制?

文章目录 前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点 前言 当我们引入注册中心的依赖&#xff0c;比如nacos的时候&#xff0c;当我们启动springboot&#xff0c;这个服务就会根据配置…

2023/4/20总结

项目 网上关于listview的资料太少了&#xff0c;在网上的那些资料里面&#xff0c;了解到以下这些。 如果希望listview后期能更改或者更新&#xff0c;那么需要使用到 ObservableList 它可以观察到&#xff0c;listview的改动。 需要特别注意一点的是&#xff1a;写俩者的…