首页/新闻资讯/正文详情

Chrome Extensions Samples 实战:使用 chrome.devtools.panels API 为 Elements 面板注入 jQuery 数据侧边栏

发布时间:2026/9/21 7:20:53 来源:云帆数科 栏目:资讯中心
Chrome Extensions Samples 实战:使用 chrome.devtools.panels API 为 Elements 面板注入 jQuery 数据侧边栏
Chrome Extensions Samples 实战使用 chrome.devtools.panels API 为 Elements 面板注入 jQuery 数据侧边栏【免费下载链接】chrome-extensions-samplesChrome Extensions Samples项目地址: https://gitcode.com/gh_mirrors/ch/chrome-extensions-samples本文基于 chrome-extensions-samples 仓库中的 api-samples/devtools/panels 示例对应文档为 readme.md系统讲解如何利用 Manifest V3 的devtools_page机制与chrome.devtools.panels.elements.createSidebarPane()API在 Chrome DevTools 的 Elements 面板中新增一个自定义侧边栏实时展示被选中 DOM 元素上绑定的 jQuery 数据。读完本文你将掌握 DevTools 扩展的入口配置、侧边栏创建、表达式注入与选区变化监听这四条核心链路并能独立复刻与扩展这一能力。一、示例要解决什么问题在 jQuery 应用中插件与业务逻辑经常通过jQuery.data()在 DOM 节点上挂载数据。这些数据在 Elements 面板的属性树中是看不到的——开发者若要排查某个元素上绑定了哪些数据只能回到控制台手动执行$0相关的jQuery.data()调用效率很低。本示例的答案非常直接把一个名为jQuery Properties的侧边栏注入到 DevTools 的 Elements 面板中每当用户选中一个 DOM 元素侧边栏就自动展示该元素上jQuery.data()返回的全部键值对。整个扩展只有三个文件manifest.json声明扩展是 DevTools 扩展并指向入口 HTMLdevtools.htmlDevTools 扩展的入口页面负责加载脚本devtools.js核心逻辑创建侧边栏并注入表达式。二、扩展 DevTools 的原理与入口配置DevTools 扩展的工作机制是浏览器将扩展的 HTML 页面注入到 DevTools 自身的页面环境中运行这个页面被称为 devtools page它可以调用chrome.devtools.*系列 API 来向 DevTools 界面添加面板、侧边栏或访问被检查页面的上下文。入口配置完全集中在 manifest.json 中全文如下{ name: Devtools - Chrome Query, version: 1.2, description: Uses the devtools API to add a sidebar that displays the jQuery data associated with the selected DOM element., devtools_page: devtools.html, manifest_version: 3 }关键字段说明devtools_pageDevTools 扩展的入口点值为入口 HTML 的相对路径。只有声明了该字段的扩展才会被加载进 DevTools 窗口声明后每次打开 DevToolsdevtools.html都会被注入执行。manifest_version: 3当前示例使用 Manifest V3 规范DevTools 扩展同样遵循 MV3 的结构约束。值得注意的是本示例不需要任何 permissions 权限声明——chrome.devtools相关 API 无需额外权限即可使用这使 DevTools 扩展的门槛非常低。入口页面 devtools.html 同样极简body中仅包含一行script srcdevtools.js/script所有初始化逻辑都在 devtools.js 中执行。三、核心实现创建 Elements 侧边栏devtools.js 是整个示例的灵魂它演示了三条关键 API 的配合使用createSidebarPane、setExpression与onSelectionChanged。3.1 创建侧边栏chrome.devtools.panels.elements.createSidebarPane( jQuery Properties, function (sidebar) { // ... } );chrome.devtools.panels.elements.createSidebarPane(title, callback)会在 DevTools 的Elements 面板中新增一个名为jQuery Properties的侧边栏并在回调中返回sidebar对象一个ExtensionSidebarPane。侧边栏会出现在 Elements 面板右侧的标签页区域中与 Styles、Computed 等内置侧边栏并列。3.2 向被检查页面注入表达式侧边栏内容不是通过 DOM 直接填充的而是通过setExpression把一段 JavaScript表达式交给 DevTools 在被检查页面的上下文中求值并将求值结果渲染为对象树sidebar.setExpression(( page_getProperties.toString() )());这里有个非常巧妙的细节page_getProperties是定义在扩展侧devtools.js的函数通过toString()序列化为源码字符串拼接成一段立即执行函数表达式后注入到页面。这样做的好处是函数体在被检查页面的全局作用域中执行因此可以直接访问页面的window.jQuery与$0扩展代码与被检查页面之间无需显式通信通道实现最简。3.3 监听选区变化updateElementProperties(); chrome.devtools.panels.elements.onSelectionChanged.addListener( updateElementProperties );chrome.devtools.panels.elements.onSelectionChanged在用户在 Elements 面板中切换选中的 DOM 节点时触发。代码在创建侧边栏后先立即调用一次updateElementProperties()渲染初始选中元素随后注册监听器保证每次选区变化侧边栏内容都能实时刷新。四、被注入函数从 jQuery 数据中提取属性page_getProperties是在被检查页面上下文中运行的函数其实现如下见 devtools.jsconst page_getProperties function () { let data window.jQuery $0 ? jQuery.data($0) : {}; // Make a shallow copy with a null prototype, so that sidebar does not // expose prototype. let props Object.getOwnPropertyNames(data); let copy { __proto__: null }; for (let i 0; i props.length; i) copy[props[i]] data[props[i]]; return copy; };逐行拆解其逻辑取值守卫window.jQuery $0确保页面确实引入了 jQuery 且当前存在被选中的元素$0是 DevTools 提供的指向当前选中元素的全局变量若条件不满足返回空对象{}侧边栏显示空内容而不是报错。读取数据jQuery.data($0)返回当前选中元素上绑定的全部数据对象。防御性拷贝用Object.getOwnPropertyNames(data)拿到自有属性名再构造一个原型为null{ __proto__: null }的浅拷贝对象。这样做的目的是侧边栏在渲染对象树时会遍历可枚举属性若直接返回jQuery.data()的原始对象可能连带暴露其原型链上的方法拷贝成 null 原型对象后界面只会呈现数据本身的键值对干净且安全。注意/*global $0*/只是代码中用于规避静态检查器对$0未定义报错的注释运行时$0由 DevTools 提供。五、运行与验证步骤按照 readme.md 中的指引完整验证流程如下克隆仓库git clone https://gitcode.com/gh_mirrors/ch/chrome-extensions-samples进入api-samples/devtools/panels目录。以未打包扩展加载在 Chrome 地址栏打开chrome://extensions开启开发者模式点击加载已解压的扩展程序选择该目录。打开一个使用 jQuery 的站点文档中给出的验证页面是 jQuery UI 官方示例页jqueryui.com/resources/demos/draggable/default.html该页面同时满足引入了 jQuery与元素上绑定了数据两个条件。选中元素打开 DevTools在 Elements 面板中选中div iddraggable。查看侧边栏在 Elements 面板的侧边栏标签区找到 jQuery Properties 并展开即可看到该元素上绑定的 jQuery 数据键值对。需要说明的适用前提侧边栏能展示数据的前提是被检查页面引入了 jQuery 且当前选中元素确实通过jQuery.data()挂载过数据jQuery UI 的 draggable 组件正是如此。在普通页面或未选中元素时侧边栏会显示空对象这属于预期行为而非 bug。六、横向对比createSidebarPane 与 panels.create同一仓库的 api-samples/devtools/inspectedWindow 示例展示了 DevTools API 的另一类扩展形态——独立面板chrome.devtools.panels.create(demo panel, icon.png, panel.html, () { console.log(user switched to this panel); });两者的区别与适用场景可以从代码层面直接对比维度createSidebarPane本示例panels.createinspectedWindow 示例挂载位置Elements 面板内的侧边栏标签DevTools 顶部独立面板标签内容更新方式setExpression注入表达式求值面板内自行管理 DOM 与消息通信典型场景跟随选区实时展示元素相关数据资源统计、请求分析等独立工具视图配套 APIonSelectionChanged、sidebar.setExpressioninspectedWindow.getResources()等可以看出本示例选择的createSidebarPane路线天然适合跟随用户当前选中元素展示上下文信息的场景若需要更复杂、独立的交互界面则应参考 inspectedWindow 示例改用panels.create。七、拓展思路基于本示例的最小骨架可以自然延伸出多种实用扩展通用数据检视器将jQuery.data替换为其他框架的数据读取方式如 React Fiber 节点、Vue 组件的__vue__属性即可为任意框架定制元素检视侧边栏多侧边栏多次调用createSidebarPane可创建多个不同主题的侧边栏分别展示不同类型的数据更复杂的渲染setExpression之后还可以用sidebar.setObject()直接注入对象或结合消息通信将原始 DOM 节点拖入侧边栏做自定义渲染权限说明本示例无需任何 permissions而一旦需要在 devtools 页面与后台 service worker 之间通信则需按 MV3 规范补充相应声明详见仓库中其他 api-samples/devtools 目录下的示例。总结通过 api-samples/devtools/panels 这个不足百行代码的示例我们完整走通了 DevTools 扩展的四条核心链路manifest.json的devtools_page入口声明、createSidebarPane侧边栏创建、setExpression的表达式注入求值、以及onSelectionChanged的选区实时监听。这套模式是构建元素级上下文检视工具的最小范式值得作为任何 DevTools 扩展项目的起点模板。【免费下载链接】chrome-extensions-samplesChrome Extensions Samples项目地址: https://gitcode.com/gh_mirrors/ch/chrome-extensions-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

文生图工具中文提示词横评:6款工具理解力实测与选型指南
文生图工具中文提示词横评:6款工具理解力实测与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 7:19:53

Caffeine缓存最佳实践清单:10个常见坑位与调优技巧
Caffeine缓存最佳实践清单:10个常见坑位与调优技巧

Caffeine缓存最佳实践清单:10个常见坑位与调优技巧 【免费下载链接】caffeine A high performance caching library for Java 项目地址: https://gitcode.com/gh_mirrors/ca/caffeine Caffeine 是 Java 生态中公认的高性能本地缓存库,被 Spring C… · 2026/9/21 7:19:53

深入 TanStack Table 的 Column 对象:获取方式、结构属性与状态交互完全指南
深入 TanStack Table 的 Column 对象:获取方式、结构属性与状态交互完全指南

前端UI组件 【免费下载链接】table 🤖 Headless UI for building powerful tables & datagrids for TS/JS - React-Table, Vue-Table, Solid-Table, Svelte-Table 项目地址: https://gitcode.com/gh_mirrors/ta/table 点击查看 免费下载 本指南面向… · 2026/9/21 7:19:53

企业网站做电脑营销多少钱?揭秘防黑挂马的底层逻辑
企业网站做电脑营销多少钱?揭秘防黑挂马的底层逻辑

企业网站做电脑营销多少钱?揭秘防黑挂马的底层逻辑 网站突然被黑,首页挂满赌博广告,后台密码怎么改都没用,这种绝望感做过站的都懂。很多老板第一反应是问:“清理一次病毒多少钱?”或者“换个服务器多少钱?”但真相往往扎心:单纯清理病毒的费用可能只要几百块,但重建信任、修复SEO权重、补全安全漏洞的成本,往… · 2026/9/21 8:03:27

3步搞定做品管圈网站从零搭建到上线避坑指南
3步搞定做品管圈网站从零搭建到上线避坑指南

3步搞定做品管圈网站从零搭建到上线避坑指南 不会写代码,但想给团队搭个品管圈展示平台?别慌。 很多河南的创业老板都卡在这一步:手里有现成的QCC成果,想做个官网放上去,结果一搜全是“前端开发教程”,看得头大。 做品管圈网站 这事儿,真没你想的那么玄乎。只要路子对,零基础也能 从零搭建… · 2026/9/21 7:45:56

Voyager 資料夾管理指南:為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」
Voyager 資料夾管理指南:為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」

AI 应用前端 【免费下载链接】voyager Enhancement suite for Gemini, AI Studio, Claude & ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件;其中的提示词管理器可用… · 2026/9/21 7:41:58

gatsby-source-graphql 插件全解析:将任意第三方 GraphQL API 缝合进 Gatsby 数据层
gatsby-source-graphql 插件全解析:将任意第三方 GraphQL API 缝合进 Gatsby 数据层

前端静态站点Web框架 【免费下载链接】gatsby React-based framework with performance, scalability, and security built in. 项目地址: https://gitcode.com/gh_mirrors/ga/gatsby 点击查看 免费下载 本篇技术指南以 gatsby-source-graphql 插件的 CHANGELOG 版… · 2026/9/21 7:41:58

Lightweight Charts v3 到 v4 迁移指南:破坏性变更逐项分析与实战改造方案
Lightweight Charts v3 到 v4 迁移指南:破坏性变更逐项分析与实战改造方案

Lightweight Charts v3 到 v4 迁移指南:破坏性变更逐项分析与实战改造方案 【免费下载链接】lightweight-charts Performant financial charts built with HTML5 canvas 项目地址: https://gitcode.com/gh_mirrors/li/lightweight-charts 本指南以 Lightweig… · 2026/9/21 7:41:58

FoundationDB 存储基准测试上 RAM Disk:mako_storage_bench.sh 在 okteto 开发 Pod 上的 tmpfs 实践指南
FoundationDB 存储基准测试上 RAM Disk:mako_storage_bench.sh 在 okteto 开发 Pod 上的 tmpfs 实践指南

分布式数据库KV存储数据库后端 【免费下载链接】foundationdb FoundationDB - the open source, distributed, transactional key-value store 项目地址: https://gitcode.com/gh_mirrors/fo/foundationdb 点击查看 免费下载 mako_storage_bench.sh 是 FoundationD… · 2026/9/21 7:41:58

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码