我目前正在编写我的第一个Google Chrome扩展程序。简化,我想在扩展程序弹出窗口中添加文件浏览器,浏览器图像并在当前打开的选项卡中插入该图像。
此外,我想将所选文件存储在扩展中,以便以后重用。
第一种方法是使用FileAPI加载文件内容并存储localStorage中编码的文件内容base64。不幸的是,由于localStorage的空间限制,在几张图片后停止工作。
更好的方法是获取所选文件的绝对文件名并在必要时重新读取文件 - 遗憾的是我无法获得包含路径的完整文件,只是获取了没有路径的文件名。
另一种方法可能是WebSQL,但这似乎很复杂 - 任何人都可以确认我们是否有配额?
有人事先做过这样的事吗?我很乐意得到任何帮助。
答案 0 :(得分:1)
根据您对缓存文件的需求,您可以简单地使用FileIO API将二进制文件保存到扩展程序的沙箱环境中。只是将文件路径存储到原始文件可能不会起作用,因为API只能在其沙箱中读取[除非您通过输入自己选择文件]。
如有必要,您可以将“unlimitedStorage”权限(developer documentation更多内容)添加到 manifest.json ,以覆盖存储限制。
"permissions": [
"unlimitedStorage"
],
这仅适用于文件I / O(临时/持久)和Web SQL(仅限临时)。由于它是同步实现, localStorage最多有~2700000个字符(因为它存储为UTF-16),设置此权限不会增加。
使用File API和Chrome 13+,您可以申请一定数量的配额(有关完整示例,请参阅here和here)。这已被引入适用于Web应用程序和工作而无需设置 unlimitedStorage 权限。 (但是,如果设置了权限,则当前不会要求用户允许存储请求)
webkitStorageInfo.requestQuota(
webkitStorageInfo.PERSISTENT
newQuotaInBytes,
quotaCallback,
errorCallback);
在我的实验中,这似乎是持久存储大量数据的唯一途径。