我在Chrome中使用了网络扩展程序,其中创建了一个简单的对象{" a":1," b":2}扩展名弹出并存储在后台页面的变量中。
弹出窗口(扩展页面操作/浏览器操作)页面
var f = {
from: form.from.value,
to: form.to.value,
};
var b = chrome.extension.getBackgroundPage();
b.save(f);
在后台页面中:
var saved = {};
function save(f) {
saved["f"] = f;
}
稍后,在关闭页面操作弹出窗口后,将在另一页上访问变量saved
。
var b = chrome.extension.getBackgroundPage();
console.log(b.saved)
请注意"已保存"并不意味着价值是安全的,它只是内存临时存储
1。期望的行为
在chrome中,这可以按预期工作,记录saved
的值。
2。具体错误
当我在Firefox中运行相同的Web扩展时,我在控制台中收到此消息
无法访问死对象
Mozilla page建议与推文作者(我)联系,但没有说明如何,只是"不要"。
我如何"断开"弹出页面中的对象?
是否有推荐的方法适用于所有浏览器(Chrome,Firefox,Edge)
答案 0 :(得分:1)
我通过序列化和反序列化后台脚本中的对象来解决这个问题。
所以而不是
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));
}