#Chrome扩展程序开发教程--04:脚本注入

news2024/12/26 12:53:59

#Chrome扩展程序开发教程--04:脚本注入

    • 引言
    • 1、基本介绍
    • 2、静态声明式注入
    • 3、动态声明式注入
    • 4、程序化注入

引言

        本系列博客旨在带来最新的Chrome扩展程序开发入门教程。


1、基本介绍

        Content scripts 是注入到网页中运行的 JavaScript 文件。它可以使用标准的 Document Object Model(DOM)对象来访问网页中内容并对其进行修改。由于安全等原因 content scripts 的运行环境和网页内容本身是隔离的,也就是说网页本身所创建对象和函数,在 content scripts 中是无法访问的,反之亦然。而且 content scripts 只能使用以下列出的 Chrome API:

  • i18n
  • storage
  • runtime
    • connect
    • getManifest
    • getURL
    • id
    • onConnect
    • onMessage
    • sendMessage

但可以通过与 service worker 进行通信来间接使用其它 Chrome API(第一章中有介绍)。

2、静态声明式注入

        在 manifest.json 文件中声明哪些 content scripts 应该注入到哪些网页中,如下所示:

{
 "name": "My extension",
 ...
 "content_scripts": [
   {
     "matches": ["https://*.nytimes.com/*"],
     "css": ["my-styles.css"],
     "js": ["content-script.js"]
   }
 ],
 ...
}

        所有可用字段见下表:

nameTypeDescription
matchesarray of strings必须字段,指定 content scripts 将被注入到哪些页面。
exclude_matchesarray of strings可选字段,指定不需要注入的页面。
all_framesboolean可选字段,指定是否注入到目标页面中的所有 frame 中。
默认为 false,即只注入到目标页面的 top frame 中。
jsarray of strings可选字段,指定要注入到匹配页面的 JS 文件。
默认在目标网页 DOM 被构建或显示前注入,注入顺序为在 list 中的顺序。
cssarray of strings可选字段,指定要注入到匹配页面的 CSS 文件。
默认在目标网页 DOM 被构建或显示前注入,注入顺序为在 list 中的顺序。
run_atRunAt可选字段,指定 content scripts 何时被注入到页面。
默认为 document_idle。其它可选:document_start、document_end。
match_about_blankboolean可选字段,指定 content scripts 是否应该注入到 about:blank 标签页中。
默认为false。
match_origin_as_fallbackboolean可选字段,指定 content scripts 是否应该注入目标网页创建的所有 frame,即使该 frame 不满足 matches 中指定的规则。
include_globsarray of strings可选字段,指定需要匹配的 glob。
exclude_globsarray of strings可选字段,指定不需要匹配的glob
worldExecutionWorld可选字段,content scripts 执行环境。
默认为 ISOLATED。其它可选:MAIN

3、动态声明式注入

        允许开发者可以通过 Chrome API 动态添加、删除、修改或获取 content scripts 行为,如下所示:

chrome.scripting
  .registerContentScripts([{
    id: "session-script",
    js: ["content.js"],
    persistAcrossSessions: false,
    matches: ["*://example.com/*"],
    runAt: "document_start",
  }])
  .then(() => console.log("registration complete"))
  .catch((err) => console.warn("unexpected error", err))
chrome.scripting
  .updateContentScripts([{
    id: "session-script",
    excludeMatches: ["*://admin.example.com/*"],
  }])
  .then(() => console.log("registration updated"));
chrome.scripting
  .getRegisteredContentScripts()
  .then(scripts => console.log("registered content scripts", scripts));
chrome.scripting
  .unregisterContentScripts({ ids: ["session-script"] })
  .then(() => console.log("un-registration complete"));

4、程序化注入

        程序化注入方式适用于那些需要响应某些事件或在某些特定场合下运行的 content scripts 。程序化注入需要在 manifest.json 中指定 host_permissions 或使用 activeTab 来临时指定当前页面,如下:
        1.在 manifest.json 中指定 activeTab 来获取当前界面的访问权限。

{
  "name": "My extension",
  ...
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "background.js"
  },
  "action": {
    "default_title": "Action Button"
  }
}

        2.在 background.js 中指定需要响应的事件。

chrome.action.onClicked.addListener((tab) => {
  chrome.scripting.executeScript({
    target: { tabId: tab.id },
    files: ["content-script.js"]
  });
});

        3.在 content-script.js 中做出具体的响应。

document.body.style.backgroundColor = "orange";

        当然, 如果任务比较简单,也可以直接在 background.js 中完成。

function injectedFunction(color) {
  document.body.style.backgroundColor = color;
}

chrome.action.onClicked.addListener((tab) => {
  chrome.scripting.executeScript({
    target : {tabId : tab.id},
    func : injectedFunction,
    args : [ "orange" ],
  });
});

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

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

相关文章

REXROTH液压方向阀安装须知

安装规程 阀安装到系统之前,应该对照订货型号比较其型号说明。 确认阀的连接表面和底板无水分,没有油。 - 清洁: ‧ 安装元件时,确认工业阀和周围干净 ‧ 油箱须密闭,以防止外部污染 ‧ 安装之前&…

【youcans的深度学习 D02】PyTorch例程:创建 LeNet 模型进行图像分类

欢迎关注『youcans的深度学习』系列 【youcans的深度学习 D02】PyTorch例程:创建 LeNet 模型进行图像分类 1. PyTorch 深度学习建模的基本步骤2. 加载 CIFAR-10 数据集3. 定义 LeNet-5 模型类3.1 LeNet 网络3.2 LeNet-5 网络3.3 定义 LeNet-5 网络模型类3.4 构建网络…

AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

GPT等AI大模型震撼来袭,基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿,深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法,在中国RPA元年(2019年)投资机构疯狂抢项目之时就已经有了。…

算法训练Day39:62.不同路径 63. 不同路径 II 动态规划

文章目录 不同路径题解(动态规划)数论方法 [不同路径 II](https://leetcode.cn/problems/unique-paths-ii/description/)题解 不同路径 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (67.70%)17460--0 Tags Companies 一个机器人位于一个 …

Linux基础—网络设置

Linux基础—网络设置 一、查看网络配置1.查看网络接口信息 ifconfig2.查看主机名称 hostname3.查看路由表条目 route4.查看网络连接情况 netstat5.获取socket统计信息 ss 二、测试网络连接1.测试网络连接 ping2.跟踪数据包 traceroute3.域名解析 nslookup 三、使用网络配置命令…

拷贝构造与深浅拷贝

文章目录 一、拷贝构造函数二、拷贝初始化三、深浅拷贝 一、拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,而且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class person { public: person(); //默认构造函数 pe…

54家备案法人信用评级机构名单

2023年4月20日,中国人民银行官网公示备案法人信用评级机构名单,共有54家机构获得了信用评级备案,并进行如下提示: 1.2019年11月26日,人民银行、发展改革委、财政部、证监会联合发布《信用评级业管理暂行办法》&#xf…

C语言之 顺序表(sequence chart)

线性表 线性表是n个具有相同特性的数据元素的有限序列。 常见的有:顺序表、链表、栈、队列、字符串.... 线性表在逻辑上是线性结构的,即一条连续的直线 但在物理结构上不一定是连续的,其在物理存储时,通常以数组和链式结构的形式…

观察者模式解读

目录 问题引进 天气预报项目需求 天气预报设计方案 1-普通方案 传统方式代码实现 观察者模式原理 观察者模式解决天气预报需求 代码实现 观察者模式的好处 问题引进 天气预报项目需求 1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式…

idm下载器是免费的吗?有哪些功能

对于PC用户来说,拥有一款好用和快速的下载工具,对我们来说至关重要,可以极大提高我们的工作效率和PC用户体验。IDM可以实现高速下载,其核心原理就是多线程下载,理论上可以达到带宽的峰值速度,深受用户的喜爱…

Python单向链表操作

目录 一、单向链表 单向链表示例图 二、单向链表的操作 1、判断链表是否为空 2,链表长度 3,遍历整个链表 4,在链表头部添加元素 5、链表尾部添加元素 6,在指定位置插入元素 7,修改指定位置的元素 8&#xff…

可视化Echarts中title、tooltip、legend、grid属性的常用设置

title中常用的设置 配置项--tooltip ​编辑 配置项--legend 配置项--grid title中常用的设置 title 标题组件,包含主标题和副标题。 以下是常用的对标题的设置 title:{//设置图表的标题text:"主标题",link:"baidu.com", //设置标题超链接…

详解C语言string.h中常见的14个库函数(三)

本篇博客继续讲解C语言string.h头文件中的库函数。本篇博客计划讲解3个函数,分别是:strstr, strtok, strerror。其中strstr函数我会用一种最简单的方式模拟实现。 strstr char * strstr ( const char * str1, const char * str2 );strstr可以在str1中查…

用yolov5+playwright过滑动验证码

目录 梳理思路 训练模型 编写代码 总结与提高 源码下载 在上一节,我们通过opencv-pythonplaywright成功过掉了QQ空间的滑动验证码。在本节,我们将使用yolov5playwright来实现相同效果。 注:因为yolov5的配置教程网上已经很多了&#xff…

C++初阶之函数重载

目录 前言 函数重载 1.函数重载的概念 2.C支持函数重载的原理--名字修饰(name Mangling) 前言 今天小编给大家带来的是C中关于函数重载的内容,和C语言不一样,函数重载是C语言特有的,那么该功能实现的底层原理是什么呢?请大家…

Idea配置maven,指定settings.xml文件不生效

一.简介 最近单位要求把项目的仓库配置从阿里云改为nexus私服,配置了一个settings-nexus.xml的配置文件,idea的maven配置指定了该settings-nexus.xml文件,发现走的还是阿里云的,新的settings-nexus.xml竟然不生效,依赖…

分支和循环语句(1)

文章目录 目录1. 什么是语句2. 分支语句(选择结构)2.1 if语句2.1.1 悬空else2.1.2 if书写形式的对比2.1.3 练习 2.2 switch语句2.2.1 在switch语句中的 break2.2.2 default子句2.2.3 练习 3. 循环语句3.1 while循环3.1.1 while语句中的break和continue 附…

记一次fastjson反序列化到内网靶标

声明:文中涉及到的技术和工具,仅供学习使用,禁止从事任何非法活动,如因此造成的直接或间接损失,均由使用者自行承担责任。 点点关注不迷路,每周不定时持续分享各种干货。 众亦信安,中意你啊&a…

多种方法解决This is usually caused by another repository pushing to the same ref的错误

文章目录 1. 复现错误2. 分析错误3. 解决错误4. 解决该错误的其他方法 1. 复现错误 今天使用git status查看文件状态,发现有一个文件未提交,如下代码所示: D:\project\test>git status On branch master Your branch is up to date with …

sftp常用命令介绍

sftp常用命令: 1. sftp 登录sftp服务器 sftp userip ​​​​​​ 如需要看全部命令:则使用help即可 2. pwd和lpwd 、 ls和lls 、cd和lcd 等 sftp登录之后默认操作是远程服务器,当需要操作本地时,就需要在前边加“l”&#…