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

Chrome扩展:创建隐身窗口返回null,如何交互窗口内容?

Chrome扩展隐身窗口交互问题解决

问题原因

Chrome的普通会话与隐身会话是完全隔离的上下文,扩展默认后台脚本没有权限访问隐身窗口对象,因此chrome.windows.create回调返回null。

解决步骤

1. 配置Manifest文件,允许扩展访问隐身模式

在manifest.json中添加incognito配置,指定扩展在隐身模式下的运行方式:

  • Manifest V3推荐使用split模式(为隐身会话创建独立后台实例):
{
  "manifest_version": 3,
  "name": "你的扩展名称",
  "version": "1.0",
  "incognito": "split",
  "permissions": ["tabs", "scripting"] // 需申请必要权限
}
  • Manifest V2配置类似,权限按需调整:
{
  "manifest_version": 2,
  "name": "你的扩展名称",
  "version": "1.0",
  "incognito": "split",
  "permissions": ["tabs", "activeTab"]
}

2. 创建隐身窗口并执行脚本的示例代码

以下是Manifest V3下的完整实现,可直接复用:

async function createIncognitoWindowAndRunScript() {
  // 创建隐身窗口并加载目标网站
  const newWindow = await chrome.windows.create({
    incognito: true,
    url: "https://example.com", // 替换为目标网站URL
    type: "normal"
  });

  // 验证窗口创建成功并获取标签页ID
  if (newWindow?.tabs?.length > 0) {
    const targetTabId = newWindow.tabs[0].id;
    try {
      // 向隐身标签页注入执行脚本
      await chrome.scripting.executeScript({
        target: { tabId: targetTabId },
        func: () => {
          // 这里编写要在页面执行的逻辑
          console.log("当前页面URL:", window.location.href);
          // 示例:修改页面背景色
          document.body.style.backgroundColor = "#f0f0f0";
        }
      });
      console.log("脚本已成功注入隐身页面");
    } catch (err) {
      console.error("脚本注入失败:", err);
    }
  } else {
    console.error("无法获取隐身窗口的标签页信息");
  }
}

// 调用函数触发流程
createIncognitoWindowAndRunScript();

3. 关键注意事项

  • 必须在Manifest中声明tabs、scripting(V3)或activeTab(V2)等权限,否则无法操作标签页和注入脚本。
  • split模式下,隐身会话的后台与普通会话后台完全隔离,两者数据不共享,需单独处理状态。
  • 若使用spanning模式,扩展后台会在普通和隐身会话间共享,但这种模式下部分API行为可能受限,不推荐用于需要严格隔离的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:05:05