如何使用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
相关产品推荐
相关产品推荐

