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

如何使用GM_getTab实现Tampermonkey脚本按Firefox容器标签区分配置

问题原因

GM_getTab接口的设计用途是读取你主动通过GM_saveTab接口存储的、和当前标签页绑定的自定义数据,而非内置返回浏览器原生标签属性(如容器ID、容器名称等)。在你没有提前向当前标签页存储过自定义数据的前提下,返回空对象属于正常现象。

实现方案

场景1:仅需不同容器加载独立配置(无跨标签页数据交互需求)

这种场景你完全不需要使用GM_getTab接口,Firefox的容器本身对存储空间做了隔离,Tampermonkey的GM_setValue/GM_getValue存储在不同容器的同个脚本之间是完全独立的,你直接把容器专属配置存在GM_value中即可,天然满足需求:

// @grant GM_getValue
// @grant GM_setValue

// 初始化配置,每个容器只会执行一次首次初始化
if (!GM_getValue("hasInit")) {
  // 可以通过注册菜单让用户选择当前容器对应的配置类型,也可以写死默认值
  GM_setValue("runConfig", {
    dataPath: "/data/work",
    enableVerify: true,
    timeout: 3000
  })
  GM_setValue("hasInit", true)
}

// 直接读取当前容器的配置使用
const currentConfig = GM_getValue("runConfig")
// 后续按配置走不同逻辑
if (currentConfig.enableVerify) {
  // 对应容器的专属判断逻辑
}

场景2:需要使用GM_getTab实现标签页级别的数据存储

如果你确实需要用到GM_getTab接口,必须先调用GM_saveTab存入自定义数据后再读取,示例代码如下:

// @grant GM_getTab
// @grant GM_saveTab
// @grant GM_getValue

// 先存储数据到当前标签页
const tabCustomData = {
  containerId: localStorage.getItem("containerFlag") || `container_${Math.random().toString(36).slice(2,9)}`,
  config: GM_getValue("runConfig")
}
GM_saveTab(tabCustomData, () => {
  // 存储回调中再读取,即可拿到对应数据
  GM_getTab(tabData => {
    console.log("当前标签页关联数据:", tabData)
  })
})

注意事项

  • 请确认你的Tampermonkey版本≥4.14,低于该版本在Firefox 93上存在容器环境下GM_getTab适配bug,会导致数据读取失败
  • GM_getTab存储的数据生命周期和当前标签页绑定,标签页关闭后数据会自动清除,需要持久化的配置请存到GM_setValue中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:09:02