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

Chrome扩展Manifest V3:向about:blank标签页注入脚本失败求助

Manifest V3 实现非激活about:blank标签页并注入脚本

问题根源

about:blank的origin为null,Manifest V3下必须同时满足三个条件才能成功注入脚本:配置正确的权限、调用executeScript时添加matchAboutBlank: true参数、创建标签页时设置非激活属性。

最简可运行代码

1. manifest.json 配置

必须包含scripting、tabs权限,以及<all_urls>作为主机权限(覆盖about:blank这类特殊URL场景):

{
  "manifest_version": 3,
  "name": "Blank Tab Inject Demo",
  "version": "1.0",
  "permissions": ["scripting", "tabs"],
  "host_permissions": ["<all_urls>"],
  "action": {
    "default_title": "创建非激活空白标签页"
  },
  "background": {
    "service_worker": "background.js"
  }
}

2. background.js 核心逻辑

直接用chrome.tabs.create创建非激活标签页,紧接着注入脚本,注意matchAboutBlank参数不能省略:

chrome.action.onClicked.addListener(async () => {
  // 创建非激活的about:blank标签页
  const newTab = await chrome.tabs.create({
    url: "about:blank",
    active: false
  });

  // 注入脚本到该标签页
  try {
    await chrome.scripting.executeScript({
      target: { tabId: newTab.id },
      matchAboutBlank: true,
      // 这里编写你要注入的脚本逻辑
      func: () => {
        document.body.style.backgroundColor = "#f0f0f0";
        document.body.innerHTML = "<h2>脚本已成功注入非激活空白页</h2>";
        console.log("注入完成");
      }
    });
  } catch (error) {
    console.error("注入出错:", error);
  }
});

关键注意点

  • active: false:直接让标签页创建后处于后台状态,无需额外处理激活问题
  • matchAboutBlank: true:这是注入about:blank页面的必填参数,缺少会触发权限错误
  • <all_urls>主机权限:因为about:blank不属于常规域名,必须用这个权限覆盖特殊URL场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:11:05