chrome 存储中使用了意外字节
Unexpected bytes used in chrome storage
我正在编写一个使用 chrome.storage API 的扩展。我想截断每个项目以确保它低于存储的最大字节阈值(本地和同步)。
文档指出每个项目的字节大小是
measured by the JSON stringification of its value plus its key length.
我使用以下代码计算预期的字节大小:
new TextEncoder().encode(JSON.stringify(value)).length + key.length
我使用下面的代码来查看实际使用情况:
chrome.storage.<storage-area>.set({ [key]: value }, () => {
chrome.storage.<storage-area>.getBytesInUse(key, bytes => {
console.log("actual bytes in use", bytes);
});
});
给定键 "test" 和值 "abc",预期字节使用量为 9b。实际字节使用量为 9b。
给定键 "test" 和值“«ταБЬℓσ»”,预期字节使用量为 23b。实际字节使用量为 23b。
给定键 "test" 和值“<”,预期字节使用量为 7b。实际字节使用量为 12b。
存储当然会在每次检查之间被清除。
在最后一个示例中,是什么导致了这 5 个额外的意外字节?我错过了什么?
编辑:我正在使用 Google Chrome 版本 73.0.3683.75(官方构建)(64 位)
感谢w0xx0m的评论,我找到了原因。
Chrome/Chromium 将小于号替换为“\u003C”以防止脚本执行。
可以找到源代码here。
我正在编写一个使用 chrome.storage API 的扩展。我想截断每个项目以确保它低于存储的最大字节阈值(本地和同步)。
文档指出每个项目的字节大小是
measured by the JSON stringification of its value plus its key length.
我使用以下代码计算预期的字节大小:
new TextEncoder().encode(JSON.stringify(value)).length + key.length
我使用下面的代码来查看实际使用情况:
chrome.storage.<storage-area>.set({ [key]: value }, () => {
chrome.storage.<storage-area>.getBytesInUse(key, bytes => {
console.log("actual bytes in use", bytes);
});
});
给定键 "test" 和值 "abc",预期字节使用量为 9b。实际字节使用量为 9b。
给定键 "test" 和值“«ταБЬℓσ»”,预期字节使用量为 23b。实际字节使用量为 23b。
给定键 "test" 和值“<”,预期字节使用量为 7b。实际字节使用量为 12b。
存储当然会在每次检查之间被清除。
在最后一个示例中,是什么导致了这 5 个额外的意外字节?我错过了什么?
编辑:我正在使用 Google Chrome 版本 73.0.3683.75(官方构建)(64 位)
感谢w0xx0m的评论,我找到了原因。
Chrome/Chromium 将小于号替换为“\u003C”以防止脚本执行。
可以找到源代码here。