第五部分 — 内容脚本与页面交互 DOM 访问模式与安全桥接

12.1 目的

有些页面操作无法直接在内容脚本中完成:

  • 调用页面 JS 函数

  • 与页面拥有的变量进行交互

本节展示了一个安全的"桥梁"模式。

12.2 使用场景 / 避免场景

使用场景: 当你需要在页面世界运行代码时。

避免场景: 仅需一个隔离世界的 DOM 变更即可。 如果可以从服务工作者 orchestrating,这是在页面的 JavaScript 环境中运行代码最可靠的方式。

sw.js:

javascript 复制代码
async function runInPageWorld(tabId) {
  const [{ result }] = await chrome.scripting.executeScript({
    target: { tabId },
    world: "MAIN", // page world (page CSP applies)
    func: () => {
      // Runs in the page's JS environment.
      return { href: location.href, title: document.title };
    },
  });
  return result;
}
复制代码

注释:

  • 需要 scripting 权限加上主机访问权限(host_permissions 或 activeTab)。

  • 主程序世界代码未被隔离;请保持其简洁,并且切勿暴露机密信息。

12.4 回退方案:postMessage 桥接(内容脚本 ↔ 页面)

这种模式简单易行,但同时也较为脆弱: 向页面世界注入 <script> 标签可能会被页面的 CSP 阻止。

content.js: CODE_BLOCK_56

最小示例

一个最小的 MV3 安全异步消息处理器(适合作为模板使用): CODE_BLOCK_57

12.5 常见问题

  • postMessage 操作务必谨慎(始终验证 type + 形状)。

  • 向页面泄露机密信息(切勿在页面中暴露扩展程序的机密信息)。

  • MAIN 世界并非隔离;页面代码可能会互相干扰(请尽量保持简洁)。

12.6 检查清单

  • 使用严格的消息类型

  • 切勿向页面暴露扩展程序的秘密

  • 在可能的情况下,优先使用独立世界的 DOM 操作

12.7 参考资料

相关推荐
Flynt1 天前
npm v12 来了:allowScripts 默认关闭,我的项目差点跑不起来
安全·npm·node.js
冬奇Lab6 天前
Skill 系列(02):Skill 安全风险——三类攻击面的实战测试
人工智能·安全·开源
Aphasia3119 天前
VPN 与内网穿透
安全
Mr_愚人派10 天前
当"Claude"不再是 Claude:一次第三方 API 代理引发的 AI 身份伪造排查实录
人工智能·安全
DaLi Yao11 天前
【无标题】
人工智能·安全
Alsn8611 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
网络研究院11 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
treesforest11 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
零零信安11 天前
零零信安荣登数世咨询《新质·数字安全专精百强(2026)》暗网情报领域,彰显专业实力与创新引领
安全·网络安全·数据泄露·暗网·零零信安
开发小能手-roy11 天前
StringBuilder vs StringBuffer:2024年还需要线程安全字符串吗?
开发语言·python·安全