【问题标题】:store images in offline storage将图像存储在离线存储中
【发布时间】:2015-10-24 15:18:09
【问题描述】:

我正在为自己创建一个快速拨号扩展程序(我知道有很多快速拨号扩展程序,但其中大多数会显示广告,而我的防病毒软件将它们威胁为 PuP),我想保存网站的徽标图像,让用户要么自己放一张图片,要么给出图片的url。

我不知道如何将图像保存在 chrome 的离线存储 (https://developer.chrome.com/apps/offline_storage#table) 中,没有保存其他文件类型的示例。

如何将图片保存在谷歌浏览器的离线存储中?

【问题讨论】:

    标签: google-chrome-extension local-storage


    【解决方案1】:

    我会将图像转换为数据 URL。那时它只是一个字符串,因此很容易保存。数据 URL 图片示例见:https://en.wikipedia.org/wiki/Data_URI_scheme#Examples

    我通常在命令行中使用cat whatever.png | base64 将图像转换为数据 URL,但如果您愿意,也有许多网站可以为您完成。

    希望对您有所帮助。

    要自己创建图像(记住将 mime 类型更改为您需要的任何类型): cat /apple/Downloads/80.png | printf "%s%s%s" '<img src="data:image/png;base64,' "$(base64 -w0)" '" alt="Red dot" />'

    将为您创建数据 URL 的网站示例:

    我做了一个小提琴来展示如何使用文件 API 来获取图像作为数据 URL:https://jsfiddle.net/quvvtkwr/

    【讨论】:

    • 如果您介绍了如何以编程方式将图像转换为数据 url,那么答案就可以了。它易于使用画布。请注意,他希望用户选择图像,因此您的命令行方法不好。
    【解决方案2】:
    • 看看chrome.storage API

      • 如果扩展程序具有unlimitedStorage 权限,则为 5MB 数据限制或无限
      • 内容脚本无需后台页面即可直接访问用户数据。
      • 它是异步的,因此比阻塞和串行的 localStorage API 更快。
      • 用户数据可以存储为对象(localStorage API 将数据存储在字符串中)。不过,仅支持简单的 JSON 可序列化对象。
    • localStorage 将所有内容序列化,因此您必须先将图像转换为 dataurl:

      var xhr = new XMLHttpRequest();
      xhr.open('GET', favicon_url);
      xhr.responseType = 'arraybuffer';
      xhr.onload = function(r) {
          if (xhr.status != 200) {
              return;
          }
          localStorage.icon = 'data:image/png;base64,' +
              btoa(String.fromCharCode.apply(null, new Uint8Array(xhr.response)));
      }
      xhr.send();
      

      这是一个假定png 图像类型的简化示例。

    • chrome.fileSystem API 可能是更好的选择。(不适合扩展,因为它仅适用于应用程序)
    • HTML5 FileSystem API:目前可能是最好的选择,但该 API 不再由 W3C 维护,因此尚不清楚它是否会保留在未来。

    【讨论】:

    • 文件系统 API 确实非常适合这个。我仍然与服务器同步,因为即使是“永久”数据迟早会从客户端擦除,但对于制作移动信号覆盖图等短期存储而言,文件系统 API 是理想的选择。
    • 如果我使用fileSystem API,如何保存用户定义/下载的图片?
    • 文件系统 API 在网页中也能正常工作。让我为你组装一个例子......
    • @Max Murphy,我链接了chrome.fileSystem,而不是我已经忘记的 HTML5 FileSystem API,因为它在公共网络应用程序上宣布 [...] API 是 Chrome 特定的并且 [ ...] 不再被 W3C 标准化。 (source)
    • Aaaa,您忘记了 chrome.storage API 作为 localStorage 的更明智的替代方案。
    猜你喜欢
    • 2019-04-18
    • 1970-01-01
    • 2012-10-24
    • 2019-02-28
    • 2016-05-10
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多