You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chrome扩展中向其他已打开扩展注入脚本并触发指定按钮点击?

Chrome扩展跨扩展注入脚本实现自动点击方案

Chrome出于安全隔离设计,默认禁止普通扩展通过chrome.scripting API注入其他扩展的chrome-extension://页面,host_permissions中的<all_urls>、通配符规则天生不覆盖chrome-extension协议,修改chrome://flags的相关配置也无法绕过该限制。

可行方案

方案1:可修改目标扩展代码时(最优合规方案)

通过跨扩展通信机制实现,无需注入脚本:

  1. 在目标扩展的manifest.json中配置externally_connectable字段,声明允许你的扩展ID发起通信:
"externally_connectable": {
  "ids": ["你的扩展ID"],
  "accepts_tls_channel_id": false
}
  1. 目标扩展的后台/页面脚本中监听通信消息,收到指令后执行点击操作:
chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) => {
  if (request.action === 'clickButton') {
    document.getElementById('some-button')?.click();
    sendResponse({status: 'success'});
  }
});
  1. 你的扩展中直接向目标扩展发送指令即可:
chrome.runtime.sendMessage('目标扩展ID', {action: 'clickButton'}, (res) => {
  console.log('操作结果', res);
});

方案2:无法修改目标扩展代码时(仅本地自用适用)

使用chrome.debugger API绕过限制,该API可以操作任意标签页的上下文:

  1. 在你的扩展manifest.json中添加权限:
"permissions": ["debugger", "tabs"]
  1. 执行操作的示例代码:
// tabId为目标扩展页面的标签ID
async function clickExtButton(tabId) {
  // 附加调试器到目标标签页
  await chrome.debugger.attach({tabId}, '1.3');
  // 执行点击代码
  await chrome.debugger.sendCommand({tabId}, 'Runtime.evaluate', {
    expression: "document.getElementById('some-button')?.click()"
  });
  // 分离调试器
  await chrome.debugger.detach({tabId});
}

注意事项

  • 使用该API时,浏览器顶部会持续显示「当前正被调试软件控制」的提示条,无法隐藏
  • 带debugger权限的扩展无法通过Chrome应用商店的常规审核,仅适合本地离线使用

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:54:08