javascript - Firefox Web 扩展 "Can' t 访问死对象”错误

标签 javascript google-chrome-extension firefox-addon-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
    });
});

背景.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;
        });
    });
};

最佳答案

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

关于javascript - Firefox Web 扩展 "Can' t 访问死对象”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52618377/

相关文章:

javascript - 将 javascript 数组发送到 django View

jquery - 从内容脚本引用时,扩展程序中的图像显示为损坏的链接

javascript - Firefox webextension 不复制到剪贴板

javascript - 使用 jsPlumb 调整元素大小并拖动元素

javascript - 将事件监听器附加到给定类的元素

javascript 删除 "onclick"事件监听器

javascript - Chrome 扩展弹出窗口打不开

google-chrome-extension - 带有 Typekit 字体的 Google Chrome 扩展

javascript - 从 Firefox 扩展中清除 innerHTML 的最佳方法

javascript - 如何通过 javascript 插件/扩展隐藏地址栏、菜单栏等来操作跨浏览器窗口?