Firefox addon 将弹出窗口中的对象存储在webextension的后台页面中

Firefox addon 将弹出窗口中的对象存储在webextension的后台页面中,firefox-addon,firefox-addon-webextensions,Firefox Addon,Firefox Addon Webextensions,我在Chrome中使用了web extension,在extensions弹出窗口中创建了一个简单的对象{“a”:1,“b”:2},并存储在后台页面的一个变量中 弹出(扩展页操作/浏览器操作)页面 在背景页中: var saved = {}; function save(f) { saved["f"] = f; } 稍后,页面操作弹出窗口关闭后,将在另一个页面上访问变量saved var b = chrome.extension.getBackgroundPage(); consol

我在Chrome中使用了web extension,在extensions弹出窗口中创建了一个简单的对象{“a”:1,“b”:2},并存储在后台页面的一个变量中

弹出(扩展页操作/浏览器操作)页面

在背景页中:

var saved = {};

function save(f) {
    saved["f"] = f;
}
稍后,页面操作弹出窗口关闭后,将在另一个页面上访问变量
saved

var b = chrome.extension.getBackgroundPage();
console.log(b.saved)
请注意,“保存”并不意味着该值是安全的,它只是内存中的临时存储

1。期望的行为
在chrome中,该功能按预期工作,记录
保存的

2。特定错误
当我在Firefox中运行相同的web扩展时,我会在控制台中收到此消息

无法访问死对象

建议联系扩展作者(我),但没有说明如何联系,只是“不要”

如何从弹出页面“断开”对象


是否有一种推荐的方法适用于所有浏览器(Chrome、Firefox、Edge)

我通过在后台脚本中序列化和反序列化对象来解决这个问题

所以不是

var b = chrome.extension.getBackgroundPage();
b.keep["key"] == value;
我不得不这么做

var b = chrome.extension.getBackgroundPage();
b.saveKeep("key", value);
在后台页面脚本中

function saveKeep(key, value){
    keep[key] = JSON.parse(JSON.stringify(value));
}

请选择要讨论的问题:包括重复问题的问题。对于Chrome扩展或Firefox WebExtensions,这几乎总是意味着包括manifest.json和一些背景、内容和/或弹出脚本/HTML。寻求调试帮助的问题(“为什么这段代码没有按我想要的方式工作?”)必须包括:(1)所需的行为,(2)特定的问题或错误,(3)在问题本身中重现它所需的最短代码。另请参见:、和。@Makyen我已更新了问题,希望您能了解为什么要加入,而不是我自己添加的快速解决方法。更具体地说,这是一种趋势,我们应该在所有浏览器中规划更严格的行为。我的期望是在弹出范围中创建对象,该对象被销毁(不考虑范围外存在的对象的引用)。关于(范围内)哪一种硬销毁/保存是可取的,这是有争议的。硬销毁关闭了可能的内存泄漏/潜在安全问题。Object ref.保持作用域处于活动状态会导致整个Firefox内存泄漏(请参阅在浏览器控制台中尝试访问死对象的频率)。今天晚些时候我会看看我是怎么处理的。
function saveKeep(key, value){
    keep[key] = JSON.parse(JSON.stringify(value));
}