Firefox Web Extension «Не удается получить доступ к мертвому объекту» - PullRequest
0 голосов
/ 03 октября 2018

У меня были проблемы с поиском актуального ответа на этот вопрос, и у меня не всегда есть время, чтобы ответить на вопросы здесь, поэтому я решил опубликовать это, чтобы я мог ответить на свой вопрос, так как я нашел решение.

Я делаю веб-расширение для Chrome и Firefox.Firefox имеет такую ​​проблему, что когда я вызываю фоновую функцию, которая устанавливает некоторые данные для переменной на фоновой странице со страницы параметров JS, а затем закрываю страницу параметров, я получаю сообщение об ошибке «Не удается получить доступ к мертвому объекту», когда фонкод позже пытается получить доступ к переменной, которая была установлена.Вот код:

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 голосов
/ 03 октября 2018

Чтобы предотвратить ошибку, мое решение состояло в том, чтобы привести в порядок и затем повторно проанализировать входящий объект JS, как это: config.defaults = Object.assign(JSON.parse(JSON.stringify(config.defaults)), JSON.parse(JSON.stringify(oNewDefaults)));

...