Chrome 浏览器 Manifest V3 版本中 scripting API 解析

Chrome 浏览器 Manifest V3 版本中 scripting API 解析

chrome.scripting

使用 chrome.scripting API 在不同上下文中执行脚本。

可以使用 chrome.scripting APIJavaScriptCSS 注入网站。

一、所需权限

  • scripting

二、Manifest 配置

使用 chrome.scripting API,需要在 manifest.json 中声明 scripting 权限,以及要向其注入脚本的网页的主机权限。使用 host_permissions 关键字或 activeTab 权限。

{"name": "Scripting Extension","manifest_version": 3,"permissions": ["scripting", "activeTab"],
}

三、注入

  • 使用 target 参数指定要向其注入 JavaScriptCSS 的目标。
  • 唯一的必填字段是 tabId

1. 注入脚本

// 获取 tab ID 
function getTabId() {  }
// 注入脚本
chrome.scripting.executeScript({target : {tabId : getTabId()},files : [ "script.js" ],
}).then(() => console.log("script injected"));

2. 注入代码

function getTabId() { ... }
function getUserColor() { ... }function changeBackgroundColor() {document.body.style.backgroundColor = getUserColor();
}chrome.scripting.executeScript({target : {tabId : getTabId()},func : changeBackgroundColor,
}).then(() => console.log("injected a function"));

3. 传递参数

function getTabId() { ... }
function getUserColor() { ... }
function changeBackgroundColor(backgroundColor) {document.body.style.backgroundColor = backgroundColor;
}chrome.scripting.executeScript({target : {tabId : getTabId()},func : changeBackgroundColor,args : [ getUserColor() ],
}).then(() => console.log("injected a function"));

4. 注入 CSS

function getTabId() { ... }
const css = "body { background-color: red; }";chrome.scripting.insertCSS({target : {tabId : getTabId()},css : css,
}).then(() => console.log("CSS injected"));

5. 取消所有脚本

async function unregisterAllDynamicContentScripts() {try {const scripts = await chrome.scripting.getRegisteredContentScripts();const scriptIds = scripts.map(script => script.id);return chrome.scripting.unregisterContentScripts(scriptIds);} catch (error) {const message = ["An unexpected error occurred while","unregistering dynamic content scripts.",].join(" ");throw new Error(message, {cause : error});}
}

四、类型(Types

1. ContentScriptFilter

属性
  • ids:string[] 可选
    • 如果指定,getRegisteredContentScripts 将仅返回具有此列表中指定的 ID 的脚本

2. CSSInjection

属性
  • css: string可选
    • 包含要注入的 CSS 的字符串。
  • files: string[] 可选
    • 要注入的 CSS 文件的路径(相对于扩展程序的根目录)。必须指定 files 和 css 中的一个。
  • origin: StyleOrigin 可选
    • 注入的样式来源。默认为 AUTHOR
  • target: InjectionTarget
    • 指定要在其中插入 CSS 的目标的详细信息。

3. ExecutionWorld

要在其中执行脚本的 JavaScript 环境。

枚举值
  • ISOLATED
    • 指定独立的环境,是扩展程序独有的执行环境。
  • MAIN
    • 指定 DOM 的主环境,与托管网页的 JavaScript 共享的执行环境。

4. InjectionResult

属性
  • documentId: string
    • 与注入相关的文档。
  • frameId: number
    • 与注入相关的帧。
  • result: any 可选
    • 脚本执行的结果。

5. InjectionTarget

属性
  • allFrames: boolean 可选
    • 是否将脚本注入标签页内的所有帧。默认值为 false。如果指定了 frameIds,则此值不能为 true
  • documentIds: string[] 可选
    • 要注入到的特定 documentId 的 ID。如果已设置 frameIds,则不能设置此字段。
  • frameIds: number[] 可选
    • 要注入到的特定帧的 ID
  • tabId: number
    • 要注入的标签页的 ID

6. RegisteredContentScript

属性
  • allFrames: boolean 可选
    • 如果指定 true,它将注入所有帧中,即使帧不是标签页中最顶层的帧。系统会单独检查每个框架是否符合网址要求;如果不符合网址要求,该框架将不会注入到子框架中。默认值为 false,表示仅匹配顶部帧。
  • css: string[] 可选
    • 要注入到匹配页面的 CSS 文件列表。在为网页构建或显示任何 DOM 之前,这些对象会按照它们在此数组中显示的顺序进行注入。
  • excludeMatches: string[] 可选
    • 不包括此内容脚本将被注入的网页。
  • id: string 必填项
    • API 调用中指定的内容脚本的 ID。不得以“_”开头,因为该字符已预留为生成的脚本 ID 的前缀。
  • js: string[] 可选
    • 要注入到匹配页面的 JavaScript 文件的列表。这些引用会按照它们在此数组中出现的顺序进行注入。
  • matchOriginAsFallback: boolean 可选
    • 指明在网址包含不受支持的架构的帧中,是否可以注入脚本,具体来说就是:about:data:blob:filesystem:。在这些情况下,系统会检查网址的来源,以确定是否应注入脚本。如果源是 null(与 data: 网址一样),则所使用的源将是创建当前帧的帧或启动到此帧的导航的帧。请注意,该框架可能不是父框架。
  • matches: string[] 可询啊
    • 指定将此内容脚本注入到哪些网页。必须为 registerContentScripts 指定。
  • persistAcrossSessions: boolean 可选
    • 指定此内容脚本是否将在以后的会话中持续存在。默认值为 true
  • runAt: RunAt 可选
    • 指定何时将 JavaScript 文件注入网页。默认值为 document_idle
  • world: ExecutionWorld: 可选
    • 要在其中运行脚本的 JavaScript world 。默认为 ISOLATED

7. ScriptInjection

属性
  • args: any[] 可选
    • 提供给提供的函数中的 curry 参数。仅当指定了 func 参数时,此属性才有效。这些参数必须可进行 JSON 序列化。
  • files: string[] 可选
    • 要注入的 JSCSS 文件的路径(相对于扩展程序的根目录)。必须且只能指定 files 和 func 中的一个。
  • injectImmediately: boolean 可选
    • 是否应尽快在目标中触发注入。并不保证注入一定会在网页加载之前发生,因为在脚本到达目标时,网页可能已经加载完毕。
  • target: InjectionTarget 必填项
    • 详细说明将脚本注入到的目标。
  • world: ExecutionWorld 可选
    • 要在其中运行脚本的 JavaScript world。默认为 ISOLATED
  • func 可选
    • 要注入的 JavaScript 函数。系统将对此函数进行序列化,然后进行反序列化以供注入。这意味着所有绑定的参数和执行上下文都将丢失。必须且只能指定 files 和 func 中的一个。

func 函数如下所示:

()=> {}

8. StyleOrigin

样式更改的来源。

CSS 中,样式更改的来源分为三类。这些类别称为 style origins。它们是 user agent originuser originauthor origin

枚举值
  • User-agent
  • User
  • Author

五、方法(Methods

1. executeScript()

将脚本注入目标上下文。该脚本将在 document_idle 运行。如果脚本的计算结果是一个 promise,则浏览器将等待该 promise 得到解决并返回结果值。

1. 示例
chrome.scripting.executeScript(injection:ScriptInjection,callback?:function,
)
2. 参数
  • injection: ScriptInjection
    • 脚本的详细信息
  • callback: function 可选
    • (results: InjectionResult[])=>void
3. 返回
  • Promise<InjectionResult[]>

2. getRegisteredContentScripts()

返回此扩展程序中与指定过滤器匹配的所有动态注册的内容脚本。

1. 示例
chrome.scripting.getRegisteredContentScripts(filter?:ContentScriptFilter,callback?:function,
)
2. 参数
  • filter: ContentScriptFilter 可选
    • 用于过滤扩展程序动态注册的脚本的对象。
  • callback: function 可选
    • (scripts: RegisteredContentScript[])=>void
3. 返回
  • Promise<RegisteredContentScript[]>

3. insertCSS()

CSS 样式表插入目标上下文。如果指定了多个帧,系统会忽略不成功的注入。

1. 示例
chrome.scripting.insertCSS(injection:CSSInjection,callback?:function,
)
2. 参数
  • injection: CSSInjection
    • 要插入的样式的详细信息。
  • callback: function 可选
    • ()=>void
3. 返回
  • Promise<void>

4. registerContentScripts()

为此扩展程序注册一个或多个内容脚本。

1. 示例
chrome.scripting.registerContentScripts(scripts:RegisteredContentScript[],callback?:function,
)
2. 参数
  • scripts: RegisteredContentScript[]
    • 包含要注册的脚本的列表。
  • callback: function 可选
    • ()=>void
3. 返回
  • Promise<void>

5. removeCSS()

从目标上下文中移除此扩展程序之前插入的 CSS 样式表。

1. 示例
chrome.scripting.removeCSS(injection:CSSInjection,callback?:function,
)
2. 参数
  • injection: CSSInjection
    • 要移除的样式的详细信息。
  • callback: function 可选
    • ()=>void
3. 返回
  • Promise<void>

6. unregisterContentScripts()

Promise Chrome 96 及更高版本

为此扩展程序取消注册内容脚本。

1. 示例
chrome.scripting.unregisterContentScripts(filter?:ContentScriptFilter,callback?:function,
)
2. 参数
  • filter: ContentScriptFilter 可选
    • 如果指定,则仅取消注册与过滤条件匹配的动态内容脚本。否则,该扩展程序的所有动态内容脚本都会被取消注册。
  • callback: function 可选
    • ()=>void
3. 返回
  • Promise<void>

7. updateContentScripts()

更新此扩展程序的一个或多个内容脚本。

1. 示例
chrome.scripting.updateContentScripts(scripts:RegisteredContentScript[],callback?:function,
)
2. 参数
  • scripts: RegisteredContentScript
    • 包含要更新的脚本列表。
  • callback: function 可选
    • ()=>void
3. 返回
  • Promise<void>

引用

  • 【scripting】

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

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

相关文章

DC电源模块与AC电源模块的对比分析

DC电源模块与AC电源模块的对比分析 BOSHIDA DC电源模块和AC电源模块是两种常见的电源模块&#xff0c;它们在供电方式、稳定性、适用范围等方面有所不同&#xff0c;下面是它们的对比分析&#xff1a; 1. 供电方式&#xff1a; DC电源模块通过直流电源供电&#xff0c;通常使用…

【Linux】Linux 系统编程——which 命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 which 命令用于定位执行文件的路径。当输入一个命令时&#xff0c;which 会在环境变量 PATH 所指定的路径中搜索每个目录&#xff0c;以查找指定的可执行文件。 2.命令格式 which [选项] 命令名3.常…

美易投资:在经济不确定性中寻求避风港:美股投资者转向高质量股

随着美国经济衰退的阴云逐渐笼罩&#xff0c;市场的不确定性增加&#xff0c;投资者开始寻找更为稳健的投资策略。在这种背景下&#xff0c;高质量股票成为了市场的新宠。这些股票通常具备稳定的财务状况、低债务水平和充裕的现金储备&#xff0c;使它们在经济放缓时期能够展现…

生产力与生产关系 —— 浅析爱泼斯坦事件 之 弱电控制强电原理

据网络文字与视频资料&#xff0c;爱泼斯坦事件是犹太精英阶层&#xff0c;为了掌控美国国家机器为犹太利益集团服务&#xff0c;而精心设下的一个局。本文先假设这个结论成立&#xff0c;并基于此展开讨论。 我们知道&#xff0c;弱电管理强电是电气工程中的一门专门学问&…

Mysql 数据库DDL 数据定义语言——数据库,数据表的创建

DDL&#xff1a;数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;—Database Definition Language 1、登录数据库&#xff0c;输入用户名和密码 mysql -ufdd -p990107Wjl2、查看数据库 show databases;3、创建一个…

MySQL面试题 | 12.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

什么情况下物理服务器会运行出错?

​  物理服务器&#xff0c;也称为裸机服务器&#xff0c;一般可以提供高性能计算水平和巨大的存储容量。然而&#xff0c;它们也难免会遇到一些问题。运行出错时&#xff0c;可能会导致停机和数据丢失。在这篇文章中&#xff0c;介绍了常见的物理服务器在一些情况下显示出错…

【白话机器学习的数学】读书笔记(2)学习回归

二、学习回归 1. y y y与 f θ ( x ) f_\theta(x) fθ​(x) y y y 是实际数据x对应的值 f θ ( x ) f_\theta(x) fθ​(x)是我们构造出来的函数&#xff0c;例如 f θ ( x ) θ 0 θ 1 x f_\theta(x) \theta_0 \theta_1 x fθ​(x)θ0​θ1​x 所以我们希望这两个越接近&…

【视觉SLAM十四讲学习笔记】第五讲——相机模型

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

苹果MAC怎么清理内存?苹果MAC清理内存的方法

很多使用苹果电脑的用户都喜欢在同时运行多个软件&#xff0c;不过这样会导致在运行一些大型软件的时候出现不必要的卡顿现象&#xff0c;这时候我们就可以去清理下内存&#xff0c;不过很多人可能并不知道正确的清内存方式&#xff0c;下面就和小编一起来看看吧。 苹果MAC清理…

Shell脚本同时调用#!/bin/bash和#!/usr/bin/expect

如果你想在一个脚本中同时使用bash和expect&#xff0c;你可以将expect部分嵌入到bash脚本中。以下是一个示例&#xff1a; #!/bin/bash# 设置MySQL服务器地址、端口、用户名和密码 MYSQL_HOST"localhost" MYSQL_PORT"3306" MYSQL_USER"your_usernam…

Maven 依赖传递和冲突、继承和聚合

一、依赖传递和冲突 1.1 Maven 依赖传递特性 1.1.1 概念 假如有三个 Maven 项目 A、B 和 C&#xff0c;其中项目 A 依赖 B&#xff0c;项目 B 依赖 C。那么我们可以说 A 依赖 C。也就是说&#xff0c;依赖的关系为&#xff1a;A—>B—>C&#xff0c; 那么我们执行项目 …

PDF有编辑密码怎么办

目录 注意&#xff1a; windows方法&#xff1a; 1 python 下载 2 打开命令行 3 安装 pikepdf 4 编写python脚本 5 使用py脚本 6解密完成 Linux方法&#xff1a; 注意&#xff1a; 此方法可以用于破解PDF的编辑密码&#xff0c;而不是PDF的打开密码 当遇到类似如下问…

MySQL语句 | 在MySQL中解析JSON或将表中字段值合并为JSON

MySQL提供了一系列的JSON函数来处理JSON数据&#xff0c;包括从JSON字符串中提取值和将表中字段值合并为JSON等。 在MySQL中解析JSON 可使用JSON_EXTRACT函数提取JSON字符串中指定字段的值&#xff0c;使用JSON_UNQUOTE函数去除提取的字符串值周围的引号&#xff0c;以得到原…

openssl3.2 - 官方demo学习 - signature - rsa_pss_direct.c

文章目录 openssl3.2 - 官方demo学习 - signature - rsa_pss_direct.c概述笔记END openssl3.2 - 官方demo学习 - signature - rsa_pss_direct.c 概述 用RSA私钥签名 d2i_PrivateKey_ex()可以从内存载入私钥数据, 得到私钥EVP_PKEY* 从私钥产生ctx, 对ctx进行签名初始化, 设置…

mavavi显示 3d姿态

目录 mayavi安装&#xff1a; mavavi显示 3d姿态 mayavi安装&#xff1a; 第1步 从这里下载两个whl文件&#xff0c; https://www.lfd.uci.edu/~gohlke/pythonlibs/ * mayavi&#xff1a;*xxx.whl * vtk: VTK‑9.1.0‑cp310‑cp310‑win_amd64.whl 第2步 pip install py…

linux-挂载Samba共享

linux-挂载Samba共享 1、linux服务器启动Samba共享服务 2、客户端电脑安装cifs-utils dnf install cifs-utils # 或 yum install cifs-utils3、挂载共享目录 # 创建挂目录 mkdir /share # 使用mount命令挂在共享目录&#xff0c;-t协议类型 -o用户名密码 共享目录访问地址 挂…

无监督学习 - 均值聚类(K-Means Clustering)

什么是机器学习 K-Means聚类是一种无监督学习算法&#xff0c;用于将数据集分成K个不同的组&#xff08;簇&#xff09;&#xff0c;每个组内的数据点与组内其他点的相似度较高&#xff0c;而与其他组内的点相似度较低。这是通过迭代地调整簇中心和将数据点分配到最近的簇来实…

热压机PLC数据采集远程监控物联网解决方案

热压机PLC数据采集远程监控物联网解决方案 随着工业4.0时代的到来&#xff0c;智能制造已经成为制造业发展的重要方向。在热压机领域&#xff0c;PLC数据采集远程监控物联网解决方案为提高生产效率、降低维护成本、优化生产工艺提供了有效的手段。 一、热压机PLC数据采集远程…

canvas绘制美队盾牌

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…