通过 WebExtensions 在 Firefox 中获取 browser.storage.local 的大小
Get size of browser.storage.local in Firefox via 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));
这里的解决方案提供了一些递归的东西 -
我正在使用 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));
这里的解决方案提供了一些递归的东西 -