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

时间:2017-07-16 08:15:27

标签: firefox-addon firefox-webextensions

我在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)

1 个答案:

答案 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));
}