Chromium CDP 开发(十):Chromium 中增加自己的Domain
1. 引言
在深入了解了 Chromium CDP(Chrome DevTools Protocol)的开发过程之后,接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain,可以避免对已有的 CDP 进行侵入式修改,从而更好地组织和管理新增的指令与事件。在本章中,我们将详细讲解如何分离出独立的 PDL 文件、JSON 配置文件以及对应的 Handler 文件,构建一个全新的、自定义的 CDP Domain。
通过构建自定义 Domain,开发者可以清晰地划分新的功能模块,并且有效提升维护性与开发效率。
2. 为何需要建立自己的 Domain
建立自定义的 CDP Domain 是为了确保我们的扩展功能能够有序地集成到现有的 Chromium CDP 体系中,而不会对原有的指令和事件产生冲突。每个已有的 Domain 都有其明确的功能范围和作用域。如果我们在这些已有的 Domain 中不断增加新的指令和事件,势必会影响原有功能的稳定性和可维护性。因此,最合适的做法是创建一个独立的 Domain,将我们自定义的指令和事件与现有功能分隔开来。
自定义 Domain 的好处在于:
独立性:自定义 Domain 与现有的 CDP 功能模块独立,避免了功能混淆。
可维护性:所有新增功能集中在自定义的 Domain 中,便于后续的维护和扩展。
安全性:降低修改已有 Domain 造成意外错误的风险。
可扩展性:随着功能需求的增加,自定义 Domain 可以灵活扩展,适应新的开发需求。
3. 建立自己的 Domain 需要做哪些工作
要构建一个新的 CDP Domain,我们需要创建并配置几个核心文件。根据之前章节的内容,我们知道 CDP 的关键文件包括 PDL 文件、访问配置文件(JSON),以及实现文件(Handler 文件)。接下来,我们将详细说明如何为自定义的 Domain 创建和配置这些文件。
3.1 方法描述文件:PDL 文件
PDL(Protocol Description Language)文件是定义 CDP 指令和事件的核心文件。每个新的 Domain 都需要有独立的 PDL 文件来描述其方法、参数、返回值以及事件。PDL 文件是 CDP 功能的基础,通过这个文件,协议的结构化描述可以被自动转化为相应的 C++ 头文件和类型定义。
文件路径示例:
third_party\blink\public\devtools_protocol\my_custom_domain.pdl
在此文件中,我们将定义自定义的指令和事件。例如,假设我们需要实现一个新的定时器功能,就可以在 PDL 文件中定义相关指令,如 startTimer
、stopTimer
,以及定时器触发的事件 timerFired
。
3.2 访问配置文件:JSON 文件
inspector_protocol_config.json
是负责管理 CDP 访问权限和功能的配置文件。每个定义在 PDL 文件中的指令和事件,都需要在这个 JSON 文件中进行注册,才能在浏览器中使用。为确保自定义 Domain 的指令和事件能够被识别和调用,我们需要在这个文件中为新创建的 Domain 配置访问权限。
文件路径示例:
chrome\browser\devtools\inspector_protocol_config.json
在配置文件中,我们需要为新 Domain 添加指令和事件的声明。这样,浏览器的 DevTools 工具才能正确解析并调用自定义的指令和事件。
3.3 实现文件:Handler 文件
Handler 文件是负责处理 CDP 指令和事件逻辑的 C++ 文件。每个 Domain 都会有对应的 Handler 文件,用于响应来自客户端的指令,执行相应的操作,并返回结果。我们需要为自定义的 Domain 创建一个新的 Handler 文件,并在其中实现所有自定义指令的具体逻辑。
文件路径示例:
chrome\browser\devtools\protocol\my_custom_domain_handler.h
chrome\browser\devtools\protocol\my_custom_domain_handler.cc
在 Handler 文件中,我们将实现所有在 PDL 文件中定义的指令。以定时器功能为例,我们将在 my_custom_domain_handler.cc
中实现 startTimer
和 stopTimer
的功能逻辑,并通过事件机制定期发送 timerFired
事件。
4. 总结
本章介绍了如何在 Chromium 中创建一个自定义的 CDP Domain。通过独立的 PDL 文件、JSON 配置文件以及 Handler 文件,我们能够将自定义的功能与现有的 CDP 系统隔离开来,从而实现更好的模块化管理和功能扩展。
创建自定义 Domain 的主要目的是保持现有 CDP 结构的完整性和稳定性,同时确保新功能的独立性和可维护性。通过将自定义指令和事件集中到一个独立的 Domain 中,开发者可以轻松地扩展浏览器的功能,满足特定的项目需求。
在接下来的章节中,我们将详细介绍如何编写这些文件,进一步实现自定义 Domain 的功能扩展。
相关文章:
Chromium CDP 开发(十):Chromium 中增加自己的Domain
1. 引言 在深入了解了 Chromium CDP(Chrome DevTools Protocol)的开发过程之后,接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain,可以避免对已有的 CDP 进行侵入式修改,从而更…...
《基于 Python 的网页爬虫详细教程》
一、引言 在当今信息时代,从互联网上获取大量有价值的数据对于许多领域的研究和分析至关重要。网页爬虫是一种自动化程序,可以从网页上抓取所需的数据。Python 作为一种强大的编程语言,拥有丰富的库和工具,使得网页爬虫的开发变得…...
前端知识图谱 - JavaScript基础(变量和类型)
变量和类型 1. JavaScript 规定了几种语言类型? JavaScript 语言的每一个值都属于某一种数据类型,它规定了 7 种语言类型。语言类型广泛用于变量、函数参数、表达式、函数返回值等场合,根据最新的语言标准,这 7 种语言类型如下&…...
五十个网络安全学习项目——(九)无线网络安全分析
五十个网络安全学习项目——(九)无线网络安全分析 这个系列灵感来源是:50个网络安全项目创意:覆盖新手至专家级,本人打算把这些项目都做一遍,做好记录,也算是对自己的提升。 本文将对WAPI 协议…...
10. 考勤信息
题目描述 公司用一个字符串来表示员工的出勤信息 absent:缺勤late: 迟到leaveearly: 早退present: 正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下: 缺勤不超过一次,没有连续的迟到/早退:任意连续7次考勤&a…...
预览和下载 (pc和微信小程序)
1.微信小程序 预览pdf 或者 图片等 //utils.js 文件//通过接口返回文件链接 打开文档 export default function previewFile({ downLinkUrl, tempFilePath }) {let url "https://" downLinkUrl.replace("http://", "").replace("https:…...
Redis 7.x如何安装与配置?保姆级教程
大家好,我是袁庭新。最新写了一套最新版的Redis 7.x企业级开发教程,今天先给大家介绍下Redis 7.x如何在Linux系统上安装和配置。 1 Redis下载与安装 使用非关系型数据库Redis必须先进行安装配置并开启Redis服务,然后使用对应客户端连接使用…...
序列化和反序列化(一)
因为通过这段时间的学习,发现,序列化和反序列化的考点和漏洞在平时遇到的还是比较多的,而且自己也没有特别去学习过这个知识点,所以在这里写一篇关于这里序列化和反序列话的博客,废话就停止在这里了。 在介绍具体的序列…...
1小时放弃Rust(2): 两数之和
1. 目的 陈越姥姥说,ACM拿奖的人有两类,一类是 NOIP 搞了好几年的,另一类是大学才开始搞 ACM 但是专注度远超常人的人。 学习 Rust 大概也是需要高度的专注度。让我试一下 ACM 的入门题目 AB 吧! 2. 题目地址 https://leetcod…...
罗德与施瓦茨NRP33SN,一款独立、特性齐全的功率探头
罗德与施瓦茨NRP33SN功率探头概述 ROHDE & SCHWARZ NRP33S 三路二极管功率传感器 罗德与施瓦茨 NRP33S 三路二极管功率传感器是一款独立 、特性齐全的仪器。它们可以通过罗德与施瓦茨 NRP2 基 本单元、通过 USB 的笔记本电脑/PC 以及许多罗德与施瓦 茨仪器(例如…...
【GoF23种设计模式】02_单例模式(Singleton Pattern)
文章目录 前言一、什么是单例模式?二、为什么要用单例模式?三、如何实现单例模式?总结 前言 提示:设计者模式有利于提高开发者的编程效率和代码质量: GoF(Gang of Four,四人帮)设计…...
springboot452当代中国获奖的知名作家信息管理系统的设计与实现(论文+源码)_kaic
摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…...
基于Redis的网关鉴权方案与性能优化
文章目录 前言一、微服务鉴权1.1 前端权限检查1.2 后端权限检查1.3 优缺点 二、网关鉴权2.1 接口权限存储至Redis2.2 网关鉴权做匹配 总结 前言 在微服务架构中,如何通过网关鉴权结合Redis缓存提升权限控制的效率与性能。首先,文章对比了两种常见的权限…...
FutureWarning: `clean_up_tokenization_spaces` was not set.
警告内容: "clean_up_tokenization_spaces was not set. It will be set to True by default. This behavior will be deprecated in transformers v4.45, and will be then set to False by default. For more details check this issue: https://github.com…...
卫星综合电子软件系统
微小卫星星载综合电子系统采用星上总线网络将星载功能模块互相连接,实现微小卫星平台的模块集成、资源重组优化以及内部信息共享和综合利用。综合电子系统是微小卫星的核心组成部分,是整星的信息和控制中心。 包括遥控遥测管理系统、载荷管理系统、 热控…...
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务 论文大纲理解1. 确认目标2. 分析过程(目标-手段分析)核心问题拆解 3. 实…...
开源数字人系统源码短视频文案提取文案改写去水印小程序
应用场景 短视频去水印: 个人用户:在社交媒体上分享短视频时,去除原视频中的水印,以保护个人隐私或避免侵权问题。企业用户:在广告、宣传和营销活动中,使用无水印的短视频以提高品牌知名度和吸引力。 文案提…...
范德蒙矩阵(Vandermonde 矩阵)简介:意义、用途及编程应用
参考: Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares Stephen Boyd and Lieven Vandenberghe 书的网站: https://web.stanford.edu/~boyd/vmls/ Vandermonde 矩阵简介:意义、用途及编程应用 在数学和计算科学中&a…...
CSSmodule的作用是什么
CSS Modules的作用主要体现在以下几个方面: 1. 解决全局样式污染问题 在传统的CSS管理方式中,样式定义通常是全局的,这很容易导致全局样式污染。当多个组件或页面共享同一个样式时,可能会出现样式冲突和覆盖的情况,从…...
winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭
winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭 protected override void WndProc(ref Message m){#region 处理点击窗体标题栏放大缩小问题,禁用点击窗体标题栏放大缩小//logger.Info($&…...
【Go系列】:全面掌握 Sentinel — 构建高可用微服务的流量控制、熔断、降级与系统防护体系
前言 在现代分布式系统架构中,服务的稳定性和可用性是至关重要的。随着微服务和云原生技术的发展,如何有效地进行流量控制、熔断降级以及系统保护成为了一个关键课题。Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制组件,它不仅…...
【图像分类实用脚本】数据可视化以及高数量类别截断
图像分类时,如果某个类别或者某些类别的数量远大于其他类别的话,模型在计算的时候,更倾向于拟合数量更多的类别;因此,观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…...
我的“双胞同体”发布模式的描述与展望
当被“激情”晕染,重创标题、摘要探索“吸睛”。 (笔记模板由python脚本于2024年12月19日 15:23:44创建,本篇笔记适合喜欢编撰csdn博客的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免…...
详细了解一下装饰模式
文章目录 装饰模式定义UML 图其主要优点包括:装饰模式的主要角色有:C 代码示例总结 装饰模式定义 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式必生成子类更加灵活 装饰模式(Decorator Pattern&…...
MyBatis入门的详细应用实例
目录 MyBatis第一章:代理Dao方式的CRUD操作1. 代理Dao方式的增删改查 第二章:MyBatis参数详解1. parameterType2. resultType 第三章:SqlMapConfig.xml配置文件1. 定义properties标签的方式管理数据库的信息2. 类型别名定义 MyBatis 第一章&…...
23 go语言(golang) - gin框架安装及使用(四)
五、跨域资源共享 跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种机制,它允许来自不同源的请求访问资源。默认情况下,浏览器出于安全原因会阻止跨域 HTTP 请求。Gin 框架本身没有内置的 CORS 支持ÿ…...
信息安全概论
文章目录 预测题重要考点1.遇到什么威胁有什么漏洞怎么缓解分析题2.网络安全现状分析 2.网络安全亮点 时间信息安全概论期末简答题软件学院实验室服务器安全风险分析与PDRR策略 1.1 信息时代的特点1.2 信息安全威胁1.3信息安全趋势1.4 研究网络与信息安全的意义2.1安全风险分析…...
深度学习的DataLoader是什么数据类型,为什么不可用来索引
在 Python 中,DataLoader是torch.utils.data.DataLoader类的实例对象,用于加载数据,它本身不是一种基本数据类型,而是一种特殊的迭代器类型,主要用于按批次加载数据,以下是其通常不可索引的原因:…...
2024最新qrcode.min.js生成二维码Demo
找了一堆代码一堆GPT,终于给写对了: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
python elasticsearch 8.x通过代理发起请求方法
由于python elasticsearch v8 engine的源码包中并未开放对于请求添加proxies的支持,导致在某些环境下无法连通外网的es服务。目前网上暂无相关的修改内容,我这边提供下自己修改的动态运行时替换elasticsearch包的源码方法demo import gzip import ssl i…...
android opencv导入进行编译
1、直接新建module进行导入,选择opencv的sdk 导入module模式,选择下载好的sdk,修改module name为OpenCV490。 有报错直接解决报错,没报错直接运行成功。 2、解决错误,同步成功 一般报错是gradle版本问题较多。我的报…...
Group FLUX - User Usage Survey Report
文章目录 User Feedback Summary: Software Advantages and FeaturesUser Feedback Issues and Suggested Improvements1. Security Concerns:Improvement Measures: 2. System Performance and Loading Speed:Improvement Measures: 3. Data Display Issues:Improvement Measu…...
门店全域推广,线下商家营销布局的增量新高地
门店是商业中最古老的经营业态之一。很早就有行商坐贾的说法,坐贾指的就是门店商家,与经常做商品流通的「行商」相对应。 现在的门店经营,早已不是坐等客来,依靠自然流量吸引顾客上门,大部分的门店经营与推广都已经开…...
【DevOps工具篇】Jenkins的Pipeline(流水线)和Shared Library(共通库)
【DevOps工具篇】Jenkins的Pipeline(流水线)和Shared Library(共通库) 文章目录 【DevOps工具篇】Jenkins的Pipeline(流水线)和Shared Library(共通库)Pipeline流水线[](#pipeline流水线)让我们在多分支上创建流水线[](#让我们在多分支上创建流水线)单分支与多分支流水线对…...
V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网
您使用BDZL-V900时,是否遇到过以下这种问题? 去现场配置WIFI发现没带电脑,无法联网❌ 首次配置WIFI时需使用网线连电脑,不够快捷❌ 而博达智联为解决该类问题,专研了一款网关配网工具,实现用户现场使用手机…...
网络安全:基线检查---自动化脚本检测.
基线定义 基线通常指配置和管理系统的详细描述,或者说是最低的安全要求,它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…...
序列模型的使用示例
序列模型的使用示例 1 RNN原理1.1 序列模型的输入输出1.2 循环神经网络(RNN)1.3 RNN的公式表示2 数据的尺寸 3 PyTorch中查看RNN的参数4 PyTorch中实现RNN(1)RNN实例化(2)forward函数(3…...
JMeter配置原件-计数器
一、面临的问题: 由于本人的【函数助手对话框】中counter计数器每次加2,且只显示偶数(如下图所示),因此借助【配置原件-计数器】来实现计数功能。 如果有大佬知道解决方式,麻烦评论区解答一下,谢谢。 二、配置原件-c…...
JS子页面调用父页面函数,监听刷新事件
目录 1.子页面调用父页面的函数 2.监听刷新事件 1.子页面调用父页面的方法 我们先来说说什么是子页面,在我这里子页面就是域名一样,然后使用iframe引入的页面就是我所说的子页面,为什么需要用到这个功能,是为了实现跨页面交互与…...
计算机视觉(为天地立心,为生民立命)
4. 逻辑回归中,对数损失函数怎么来表示的? 5. relu激活函数它的一些特点? ReLU的数学表达式为:f(x)max(0,x) 特点: 1.简单高效:ReLU 的计算非常简单,直接将输入小于 0 的部分置为 0ÿ…...
三格电子——新品IE103转ModbusTCP网关
型号:SG-TCP-IEC103 产品概述 IE103转ModbusTCP网关型号SG-TCP-IEC103,是三格电子推出的工业级网关(以下简称网关),主要用于IEC103数据采集、DLT645-1997/2007数据采集,IEC103支持遥测和遥信,可…...
金碟中间件-AAS-V10.0安装
金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …...
最新D音滑块JS纯算法还原(含完整源码)
文章目录 1. 写在前面2. 接口分析2. 源码实现【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作! 【🌟作者推荐】:对爬…...
接口绑定有几种实现方式
在 MyBatis 中,接口绑定是指通过 Java 接口与 SQL 映射文件(XML)进行绑定,允许你以面向对象的方式操作数据库。MyBatis 提供了几种不同的实现方式来实现接口绑定。 MyBatis 接口绑定的几种实现方式 基于 XML 映射的实现方式 这是…...
Oracle JDK需登录下载解决
JDK下载地址 地址:https://www.oracle.com/java/technologies/downloads/archive/ 登录账号获取 访问:https://bugmenot.com/view/oracle.com 直接复制账号密码登录下载...
LabVIEW与PLC点位控制及OPC通讯
在工业自动化中,PLC通过标准协议(如Modbus、Ethernet/IP等)与OPC Server进行数据交换,LabVIEW作为上位机通过OPC客户端读取PLC的数据并进行监控、控制与处理。通过这种方式,LabVIEW能够实现与PLC的实时通信,…...
VM16+解压版CentOS7安装和环境配置教程(2024年12月20日)
VM16解压版CentOS7安装和环境配置教程-2024年12月20日 一、下载安装包二、vm安装三、解压版CentOS7安装四、CentOS设置静态IP 因为很多同学觉得配置CentOS7好麻烦,我特地提供了一个已经配置好的现成镜像,来简化操作本篇来记录过程。 如果你在看到这篇文章…...
SQL中的约束
约束(CONSTRAINT) 对表中字段的限制 非空约束:NOT NULL 只能声明在每个字段的后面 CREATE TABLE test( id INT NOT NULL, last_name VARCHAR(15), phone VARCHAR(20) NOT NULL );唯一性约束:UNIQUE 说明: ① 可以声明…...
【Lua热更新】上篇
Lua 热更新 - 上篇 下篇链接:【Lua热更新】下篇 文章目录 Lua 热更新 - 上篇一、AssetBundle1.理论2. AB包资源加载 二、Lua 语法1. 简单数据类型2.字符串操作3.运算符4.条件分支语句5.循环语句6.函数7. table数组8.迭代器遍历9.复杂数据类型 - 表9.1字典9.2类9.3…...
数据压缩比 38.65%,TDengine 重塑 3H1 的存储与性能
小T导读:这篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一。作者通过自身实践,详细分享了 TDengine 在高端装备运维服务平台中的应用,涵盖架构改造、性能测试、功能实现等多个方面。从压缩效率到查询性能&#x…...