浏览器扩展V3开发系列之 chrome.runtime 的用法和案例

news2024/11/24 15:50:10

【作者主页】:小鱼神1024

【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等

chrome.runtime API 提供了一系列的方法和事件,可以通过它来管理和维护 Chrome 扩展的生命周期、消息传递、获取清单(manifest)等

掌握它,是浏览器扩展开发必不可少的。我们一起看看它有那些用法吧。
先新建一个 popup.html,因为本节主要学习 chrome.runtime 相关知识,popup.html 内容随便编写就行,如下即可:
image.png

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>chrome.runtime</title>
  </head>

  <body>
    <p>chrome.runtime</p>
  </body>

</html>

然后,新建 manifest.json 配置文件
image.png

{
  "manifest_version": 3,
  "name": "chrome.runtime",
  "description": "chrome.runtime API 基础用法",
  "version": "1.0",
  "action": {
    "default_popup": "popup.html",
    "default_icon": "icons/icon128.png"
  },
  "background": {
    "service_worker": "background.js"
  }
}

其他配置项应该都好理解,service_worker 是服务工作线程,可以在扩展后台运行,可以理解为“后端”服务。

既然配置了 service_worker,我们在根目录还缺一个 background.js 文件。
新建 background.js 如下:
image.png

chrome.runtime.onInstalled.addListener(function () {
  console.log("插件已安装");
});

ok,我们基础扩展开发完成了。在浏览安装成功后,如下:
image.png

chrome.runtime.onInstalled.addListener(listener)

点击 Service Worker 后,弹出的 DelTools 就能看到打印出: 插件已安装
说明 chrome.runtime.onInstalled 监听的事件,在扩展安装时会执行一次。
image.png

当刷新或者更新扩展时, chrome.runtime.onInstalled 监听的事件依然会执行。
5.gif

这里点击刷新按钮后,其实相当于是:先卸载扩展,再重新安装扩展,后续就有体现。

当我们需要扩展安装成功后,立即做一些任务(逻辑),chrome.runtime.onInstalled 就是很好的选择了。
注意:它只有在初次安装扩展、或者更新扩展时才执行一次,后续将不在执行!

2、chrome.runtime.onStartup.addListener(listener)

chrome.runtime.onStartup 从名称上大概就能猜出来,其实浏览器启动时,执行其监听的事件。
我们在 background.js 中添加如下代码:
image.png


chrome.runtime.onInstalled.addListener(function () {
  console.log("插件已安装");
});

chrome.runtime.onStartup.addListener(function () {
  console.log("浏览器重新启动");
});

当我们重新启动浏览器,打开扩展程序的 DevTools 调试面板可以看到,已经打印出: 浏览器重新启动
image.png

当我们需要扩展每次打开浏览器时执行一些任务(逻辑),chrome.runtime.onStartup 是不错的选择。
注意:它只有在浏览器重新启动时才执行一次。

3、chrome.runtime.setUninstallURL(url, callback?)

它的作用是:卸载扩展时打开指定URL,通常用于展示问卷调查。
那我们也尝试验证下吧。
我们想在卸载时,跳转到一个问卷调查页面(我们也没有啊)。那就先跳转到百度界面,验证其功能即可
image.png

// 安装、更新时执行
chrome.runtime.onInstalled.addListener(function () {
  console.log("插件已安装");
});

// 浏览器重新启动时执行
chrome.runtime.onStartup.addListener(function () {
  console.log("浏览器重新启动");
});

// 卸载时执行
chrome.runtime.setUninstallURL(
  "https://www.baidu.com/",
  function () {
    console.log("插件已卸载");
  }
);

我先验证下刷新按钮的功能:
5.gif
能清楚的看到,点击刷新按钮后,先执行了卸载,然后再执行了安装操作。

5.gif
当卸载扩展后,立刻就跳转到了百度界面。

4、chrome.runtime.getURL(path)

它的作用:将一个扩展内部的相对路径转换为完整的 URL

如果我们想获取 background.js 的完整路径时,可以这样写:
image.png

// 获取 background.js 的绝对路径
const url = chrome.runtime.getURL("background.js")
console.log("url", url)

打印的结果:
image.png

同样的,也可以获取 pupup.html 的扩展内部路径:
image.png

const popup_url = chrome.runtime.getURL("popup.html")

console.log("popup_url", popup_url)

Service Worker 打印结果为:image.png
那小伙伴可能问了,拿到资源(js、css、html、jpg等等)的 url 有什么作用呢?

其实,作用很简单,就使用它们。比如,如果我们想在扩展安装成功后,立即打开一个popup.html窗口,实现如下:
image.png

// 安装成功,立即打开一个popup窗口
chrome.runtime.onInstalled.addListener(function () {
  chrome.tabs.create({ url: chrome.runtime.getURL("popup.html") });
});

这里我们使用了 chrome.tabs API,可以用它打开一个新窗口,后续会讲到。使用tabs之前要在manifest.json声明它,如下:
image.png

{
    "manifest_version": 3,
    "name": "chrome.runtime",
    "description": "chrome.runtime API 基础用法",
    "version": "1.0",
    "action": {
        "default_popup": "popup.html",
        "default_icon": "icons/icon128.png"
    },
    "background": {
        "service_worker": "background.js"
    },
    "permissions": [
        "tabs"
    ]
}

效果如下:
5.gif
当我们需要用到资源路径时,chrome.runtime.getURL(path) 绝对是一个不错的选择。

5、chrome.runtime.getManifest()

它的作用是:返回当前扩展清单文件的详细信息。

比如我们要获取扩展的版本信息:
image.png

// manifest 配置信息
const manifest_info = chrome.runtime.getManifest();
console.log("manifest_info", manifest_info);

const { version } = manifest_info;
console.log("version", version);

打印结果:
image.png

6、chrome.runtime.sendMessage

在扩展中,总会用到扩展页面、内容脚本和工作服务线程之间互相通信,这个时候就会用到了 chrome.runtime.sendMessage(message, callback?) 和 chrome.runtime.onMessage.addListener(listener) 了,前者是发送消息,后者是接收消息。

举个例子,当扩展页面加载完成时,发送一个消息,在后台服务中接收并打印。
首先,在根目录新建 popup.js ,内容如下:
image.png

// 当前页面加载完成后
document.addEventListener("DOMContentLoaded", function () {
  // 发送消息
  chrome.runtime.sendMessage({ message: "hello" }, function (response) {
    console.log("收到来自接收者的回复:", response);
  });
});

然后在 popup.html 中引入,如下:
image.png

在后台服务 background.js 中接收:
image.png

打印效果如下:
5.gif

其中形参:

  • message:这是发送的消息,可以是任意类型。
  • sender:包含关于消息发送者的信息,例如哪个标签页发送的,哪个扩展发送的等。
  • sendResponse:用于向发送者回复一个消息。如果这个函数在事件监听器中返回了 true,那么表示异步回复

代码地址:传送门

总结
  • 首次安装或者更新时执行,用 chrome.runtime.onInstalled.addListener(listener) 监听
  • 浏览器启动时执行,用 chrome.runtime.onStartup.addListener(listener) 监听
  • 卸载时执行并跳转,用 chrome.runtime.setUninstallURL(url, callback?)
  • 获取扩展内部绝对路径时,用 chrome.runtime.getURL(path)
  • 获取扩展清单时,用 chrome.runtime.getManifest()
  • 后台服务监听消息、脚本或扩展页面发送消息是,用 chrome.runtime.onMessage.addListener(listener) 和 chrome.runtime.sendMessage(message, callback?)

创作不易,动动您发财的小手,点赞关注一波,支持我创作更多对您有帮助的文章!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用两个钟,我又在VMWARE上搞了一套内部网配置

最近要学es&#xff0c;所以打算自己用虚拟机搞个NAT&#xff0c;又搞了两个钟。为了不再费劲尝试&#xff0c;也为了造福大众&#xff0c;所以选择搞一份NAT笔记&#xff01;&#xff01;&#xff01;&#xff01; 1.初始化网关和DNS 我们给网关配置一个地址192.168.96.1&…

计算机图形学入门20:加速光线追踪

1.前言 前文说了Whitted-style光线追踪技术的原理以及光线与平面的交点计算方式&#xff0c;对于现在应用最广的Polygon Mesh显式曲面来说&#xff0c;一个复杂场景中的多边形面总数可能达到千万甚至亿万以上&#xff0c;如果每个像素发射光线都和场景中每个平面进行求交点计算…

植物大战僵尸杂交版v2.1最新直装版,苹果+安卓+PC+防闪退工具+修改工具+高清工具+通关存档整合包更新

今天我要和各位聊聊一款让全网疯狂的游戏——《植物大战僵尸杂交版》。这可不是简单的游戏&#xff0c;它可是让B站的UP主“潜艇伟伟迷”一夜成名的大作&#xff0c;让无数玩家为之疯狂的魔改神作&#xff01; 记得2009年&#xff0c;《植物大战僵尸》横空出世&#xff0c;那时…

SpringBoot优点达项目实战:登录功能实现(四)

SpringBoot优点达项目实战&#xff1a;登录功能实现&#xff08;四&#xff09; 文章目录 SpringBoot优点达项目实战&#xff1a;登录功能实现&#xff08;四&#xff09;1、查看接口2、查看数据库3、代码实现1、创建实体类2、controller实现3、service层实现4、Mapper层 4、测…

IPFoxy Tips:匿名海外代理IP的使用方法及注意事项

在互联网上&#xff0c;隐私和安全问题一直备受关注。为了保护个人隐私和数据安全&#xff0c;使用匿名代理IP是一种常用的方法。匿名代理IP可以隐藏用户的真实IP地址&#xff0c;使用户在访问网站时更加隐秘和安全。 本文将介绍匿名代理IP的基本原理和核心功能。 基本原则 匿…

Power BI 占比函数

1&#xff0c;普通层级结构占比 占比1 DIVIDE([sum_qty], CALCULATE([sum_qty],ALLSELECTED(Item[ITEM_CODE]))) //按照line为一个整理展示数据占比2 SWITCH( true(),ISINSCOPE(Item[ITEM_CODE]),DIVIDE([sum_qty], CALCULATE([sum_qty],ALLSELECTED(Item[ITEM_CODE]))), IS…

前端 CSS 经典:mix-blend-mode 属性

前言&#xff1a;这是一个混合属性&#xff0c;作用是将两个颜色混合生成一个新颜色。可以将视频和文字相融合&#xff0c;产生动态文字效果。 效果 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" />&l…

数据资产风险管理与合规性:全面识别、科学评估并有效应对数据风险,确保企业数据资产的安全性与合规性,为企业稳健发展提供坚实保障

一、引言 在数字化时代&#xff0c;数据资产已成为企业运营和决策的核心要素。然而&#xff0c;随着数据量的快速增长和技术的不断演进&#xff0c;数据资产面临的风险也日益增多&#xff0c;如数据泄露、数据篡改、数据滥用等。同时&#xff0c;数据保护法律法规的不断完善&a…

文华财经盘立方均线-支撑压力自动画线多空声音预警指标公式源码

文华财经盘立方多空均线-支撑压力自动画线指标公式源码&#xff1a; //MA5:MA(C,5); //MA10:MA(C,10); MA20:MA(C,20),COLORRED; MA60:MA(C,60),COLORGREEN; TY:CLOSE; HD:FILTER(BACKSET(FILTER(REF(TY,10)HHV(TY,2*101),10),101),10); LD:FILTER(BACKSET(FILTER(REF(T…

PatchMixer:一种用于长时间序列预测的Patch混合架构

前言 《PatchMixer: A Patch-Mixing Architecture for Long-Term Time Series Forecasting》原文地址&#xff0c;Github开源代码地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文&#xff0c;并对其进行了中文翻译…

jdk1.8升级到jdk11遇到的各种问题

一、第三方依赖使用了BASE64Decoder 如果项目中使用了这个类 sun.misc.BASE64Decoder&#xff0c;就会导致错误&#xff0c;因为再jdk11中&#xff0c;该类已经被删除。 Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder 当然这个类也有替换方式&#xf…

一本好的电子画册应这样做,你做对了吗?

​一本好的电子画册&#xff0c;不仅要有吸引人的图文&#xff0c;还可能包括视频、音频等多媒体元素&#xff0c;为读者提供全方位的阅读体验。连贯性是指画册的整体设计风格、内容布局要协调一致&#xff0c;让读者在阅读过程中感受到流畅和自然。创新性则要求创作者在内容呈…

【别再用Excel了!】这款免费可视化工具能帮你轻松提升效率

现代数据分析和展示的需求已经远远超出了传统工具的能力&#xff0c;尤其是在需要快速、直观和高效地处理复杂数据的情况下。山海鲸可视化通过其强大的功能和易用性&#xff0c;成为了设计师以及各类新手用户的理想选择。下面我就以一个可视化设计师的角度&#xff0c;和大家简…

月入稳定还是创业冒险:你的选择决定未来

大家好&#xff0c;我是汇舟问卷。在现在这个环境下&#xff0c;无论是就业还是创业都不好做。在传统就业与创业之间的选择时&#xff0c;我们应避免一概而论或过度推崇某一方向。 事实上&#xff0c;并非所有人都适合创业&#xff0c;对于那些满足于稳定工作&#xff0c;每月…

深入理解计算机系统 CSAPP 家庭作业7.13

用一下496页提到的工具咯 A: whereis libm.a file lidm.a gedit libm.a libm.a是个ASCII text文件打开一看原来 libm-2.27.a 和libmvec.a才是我们要看的 所以我们cd到目标地址后 ar -t libm-2.27.a ar -t libmvec.a B: gcc -Og bar5.c foo5.c 用之前的两个文件链接后生成…

电脑复制按哪个键?还不会操作的赶紧来看!

当我们提到“电脑复制按哪个键”时&#xff0c;实际上是在讨论电脑键盘上用于执行复制操作的快捷键。复制功能在日常的电脑操作中极为常用&#xff0c;无论是文本编辑、文件处理还是图片操作&#xff0c;都离不开复制这一基本功能。以下&#xff0c;我们将深入探讨电脑复制操作…

不花一分钱也能制作出高质量的宣传册

在当今竞争激烈的市场环境中&#xff0c;拥有一份高质量的宣传册对于企业或个人来说至关重要。它能帮助您在客户心中留下深刻印象&#xff0c;有效推广您的品牌或服务。但聘请专业设计师和印刷商制作宣传册往往需要不小的开支。那么&#xff0c;有没有既省钱又能做出高质量宣传…

web图片怎么导入ps?这个方法给你轻松解决!

随着WebP格式图片因其体积小、加载快的优势在网站中日益普及&#xff0c;对于图片编辑者来说&#xff0c;能够直接在Photoshop中打开和编辑WebP文件变得尤为重要。 WebPShop插件应运而生&#xff0c;它是一个专为Photoshop设计的模块&#xff0c;支持打开和保存WebP图像&#…

如何借助物联网实现土壤监测与保护

如何借助物联网实现土壤监测与保护 高标准农田信息化是指利用现代信息技术&#xff0c;如物联网、大数据、云计算等&#xff0c;对农田进行数字化、智能化的管理&#xff0c;以提高农田的生产效率和可持续发展能力。其中&#xff0c;土壤监测与保护是农田信息化的重要内容之一…

面向对象修炼手册(四)(多态与空间分配)(Java宝典)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;面向对象修炼手册 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 1 多态 1.1 多态的形式&…