将现有的扩展程序从chrome移植到边缘,并且chrome.storage.local的1mb限制存在问题。我在本主题String length in bytes in JavaScript中使用该函数来查找字符串的大小,并发现json字符串超过1mB时将抛出“超过1mB”异常,但是如果json字符串在250kB与1mB之间,则会收到一条消息在chrome.runtime.lastError中表示数据超过1mB,不会引发异常,也不会存储数据。

我尝试切换到browser.storage,但得到的结果相同。这是错误还是我使用的字节大小函数错误?

另外,我正在使用lz-string压缩数据以尝试增加存储量。

tmp = JSON.stringify(tmp);
tmpAsString = LZString.compressToUTF16(tmp);

var compresskey = 'compressedJSExtension';
try {
    chrome.storage.local.set({[compresskey] : tmp }, function () {
        if (chrome.runtime.lastError) console.error(chrome.runtime.lastError);
    });
}
catch (f) {
    //Handle if the string is over 1mB

}

最佳答案

根据扩展API路线图(https://docs.microsoft.com/en-us/microsoft-edge/extensions/api-support/extension-api-roadmap),Microsoft Edge在内部版本14986及更高版本中支持unlimitedStorage权限(当前仅对Windows Insiders可用,尽管一旦Windows 10 Creators Update启动它将公开可用)。使用它应该可以避免1MB的大小限制,但是由于Edge的名称空间是browser,因此您必须将上面的代码更改为browser.storage.local

如果您需要注册Windows Insider Preview程序,可以在这里进行注册:https://insider.windows.com

10-04 22:24