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

能否向blob:chrome-extension://类URL注入Chrome扩展content_scripts?

关于向blob:chrome-extension://类URL注入Content Script的问题

结论

默认情况下无法自动向blob:chrome-extension://这类URL注入content script。

原因分析

Chrome的content script匹配规则对Blob URL做了特殊处理:即使在manifest.json中配置"<all_urls>"作为匹配规则,扩展也不会自动将content script注入到由自身生成的blob:chrome-extension://协议下的页面中。这类Blob资源属于扩展的隔离上下文,不触发常规的content script匹配逻辑。

可行解决方案

方案1:通过chrome.scripting.executeScript主动注入

在Blob页面加载完成后,调用Chrome的脚本API主动注入目标脚本。需要在manifest.json中声明scripting权限以及对应的主机权限:

配置manifest.json

{
  "permissions": ["scripting", "tabs"],
  "host_permissions": ["<all_urls>"]
}

注入代码示例

// 假设已获取目标标签页的tab.id
await chrome.tabs.update(tab.id, { url: URL.createObjectURL(blob) });
// 等待页面加载后执行注入
setTimeout(async () => {
  await chrome.scripting.executeScript({
    target: { tabId: tab.id },
    files: ["test.js"]
  });
}, 1000);

方案2:在Blob内容中内嵌引用脚本

如果Blob的HTML内容由扩展完全控制,可以直接在HTML字符串中引用扩展内的脚本文件,同时配置web_accessible_resources允许该脚本被Blob页面访问:

修改Blob创建代码

const blobHtml = `<html>
  <script src="${chrome.runtime.getURL('test.js')}"></script>
</html>`;
const blob = new Blob([blobHtml], { type: "text/html" });
await chrome.tabs.update(tab.id, { url: URL.createObjectURL(blob) });

配置manifest.json

"web_accessible_resources": [{
  "resources": ["test.js"],
  "matches": ["blob:chrome-extension://*"]
}]

内容的提问来源于stack exchange,提问作者陳奕辰

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:45:43