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
相关产品推荐
相关产品推荐

