Firefox Web扩展“无法访问死对象”错误

时间:2018-10-03 01:12:55

标签: javascript google-chrome-extension firefox-webextensions

我在寻找有关此问题的最新答案时遇到了麻烦,并且经常没有时间在这里回答问题,所以我想将其发布出来,这样我就可以回答自己的问题,因为我已经找到了解决方案

我正在为Chrome和Firefox制作一个Web扩展程序。 Firefox的问题是,当我调用一个后台函数,该后台函数从选项页JS中将一些数据设置为后台页中的var,然后关闭选项页时,在后台时出现错误“无法访问死对象”代码稍后尝试访问设置的变量。这是代码:

options.js

formInOptions.addEventListener('submit', function(e){
    e.preventDefault();
    chrome.extension.getBackgroundPage().defaults({
        keyname:  e.target['form-field'].value
    }, function(){
        // data saved cb
    });
});

background.js

function defaults(oNewDefaults) {
    // Global oDefaults already exists, and trying to access this after the options page is closed causes the error.
    chrome.storage.local.get({
        config: {}
    }, function(data) {
        let config = data.config;
        config.defaults = config.defaults || {};
        config.defaults = Object.assign(config.defaults, oNewDefaults); // Merge incoming obj into existing obj
        chrome.storage.local.set({
            config: config
        }, function() {
            oDefaults = config.defaults;
        });
    });
};

1 个答案:

答案 0 :(得分:0)

为防止该错误,我的解决方案是先对输入的JS obj进行字符串化然后重新解析,如下所示:config.defaults = Object.assign(JSON.parse(JSON.stringify(config.defaults)), JSON.parse(JSON.stringify(oNewDefaults)));