我正在将Firefox Add-on SDK扩展移植到WebExtensions。以前,我可以访问浏览器的搜索引擎,但现在不行了,因此一位热心的用户建议我尝试阅读search.json.mozlz4文件,该文件包含每个已安装的引擎。然而,这个文件是使用LZ4压缩的json格式,并且它采用Mozilla自己的LZ4格式,具有自定义的幻数'mozLz40\0'。
以前,人们可以使用这个方法来读取使用LZ4压缩的文本文件,包括mozlz4文件:
以前,人们可以使用这个方法来读取使用LZ4压缩的文本文件,包括mozlz4文件:
let bytes = OS.File.read(path, { compression: "lz4" });
let content = new TextDecoder().decode(bytes);
虽然我找不到关于"compression"字段的文档,但它可以工作。
现在,使用WebExtensions,我能想到的最好方法来读取文件是:
var reader = new FileReader();
reader.readAsText(file);
reader.onload = function(ev) {
let content = ev.target.result;
};
这不涉及任何压缩处理。这个库 处理LZ4,但它是为node.js打造的,所以我不能使用它。 [编辑:它也可以独立工作]。然而,即使我删除了自定义的魔数处理,我仍然无法将其解压缩,而相比之下,这段Python代码可以正常工作:
import lz4
file_obj = open("search.json.mozlz4", "rb")
if file_obj.read(8) != b"mozLz40\0":
raise InvalidHeader("Invalid magic number")
print(lz4.block.decompress(file_obj.read()))
我怎么用JS实现这个?