javascript - 通过 WebExtensions 获取 Firefox 中 browser.storage.local 的大小

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

我正在使用 WebExtensions 将 Chrome 扩展程序移植到 Firefox。

由于 FireFox 不支持 StorageArea.getBytesInUse();,是否有任何解决方法可以获取本地存储对象的总大小?

当存储接近其限制时,我需要它来调用clearCache函数。

最佳答案

以下是您可以使用的一些东西的开始:

browser.storage.local.get(null)
    .then(store => {
            var bytes = 0;
            for (var p in store) {
                var entry = store[p];
                switch (typeof(p)) {
                    case 'number':
                        bytes += 8;
                        break;
                    case 'boolean':
                        bytes += 4;
                        break;
                    case 'string':
                        bytes += (entry.length * 2);
                        break;
                    case 'undefined':
                        bytes += 0;
                        break;
                    case 'object':
                        if (entry === null) {
                            bytes += 0;
                        } else {
                            if (entry.byteLength) {
                                bytes += entry.byteLength;
                            } else if (entry.buffer) {
                                bytes += entry.buffer.byteLength;
                            } else {
                                // todo: recrusively run this on all entries
                            }
                        }
                        break;
                    case 'array':
                        // todo: recursively run this on all elements
                        break;
                    default:
                        if (
                        }
                }
            });
        .catch(ex => console.warn('run borwser.storage.local.get again as it hit error, ex:', ex));

这里的解决方案提供了一些递归的东西 - https://stackoverflow.com/a/6351386/1828637

关于javascript - 通过 WebExtensions 获取 Firefox 中 browser.storage.local 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561503/

相关文章:

javascript - 带有 UI Bootstrap 指令的 ng-bind-html

javascript - 如何在 Chrome 扩展中的内容脚本之间重复使用代码?

javascript - EDGE 无法使用 JS 将大图像复制到 Canvas 中?

javascript - 有没有一种方法可以找到时间序列中超过 X% 时间的 Y 值?

javascript - 单击菜单更改文本

google-chrome-extension - 以编程方式进入多功能框模式

javascript - chrome webrequest api url 数组?

firefox-addon - Firefox 插件在自定义窗口中显示名称但没有图标

javascript - Firefox Add-on SDK 仅在重启时重新加载扩展

c++ - 从 mozilla.rsa 文件中解析插件 ID