解决!如何使用cache.put将jpg添加到缓存中?

Solved! How to use cache.put to add a jpg to the cache?

提问人:Gmap4 guy 提问时间:11/11/2023 最后编辑:Gmap4 guy 更新时间:11/15/2023 访问量:26

问:

这个问题涉及 javascript 缓存 api。

我使用 cache.add 将 jpg 添加到缓存中没有问题。但到目前为止,我还没有弄清楚如何使用 fetch 和 cache.put 来做同样的事情。我做了很多搜索并浏览了很多帖子,但到目前为止,我还没有看到一个基本的例子。

以下代码将jpg_url作为键添加到缓存中。但是当我的 pwa 尝试离线显示jpg_url时,不会显示任何图像。显然,我的代码实际上并没有将jpg保存在缓存中。我错过了什么?

更新:已解决!cache_url指向 jpg。下面的代码会将该 jpg 保存在缓存中,并以 cache_url 为键。秘诀是 await response.blob()

async function cache_fetch (cache,cache_url) {
    options = {
        method: "GET",
        mode: "cors",
        headers: {'Content-Type': 'image/jpeg'}
    }
    response = await fetch(cache_url, options)
    .then (async function(response) {
        if (response.status === 200) {
            my_blob = await response.blob();
            cache.put(cache_url,new Response(my_blob, {type:'image/jpeg'}))
            .then(function() {
            // do stuff
            })
            .catch(function(error) {
            // do other stuff
            });
        }   else {
            // handle status not 200
        }
    })
    .catch(function(error) {
        // handle fetch error
    });
}           


JavaScript 缓存 progressive-web-apps service-worker cacheapi

评论

0赞 grimsteel 11/14/2023
您如何尝试离线查看 JPG?如果您希望能够在浏览器中转到,则需要从缓存中手动获取 JPG,并在 Service Worker 的 fetch 侦听器中返回。AFAIK,浏览器不会自动执行jpg_url
1赞 Gmap4 guy 11/14/2023
该项目是一张传单地图。以下 Leaflet 命令会将图像作为叠加添加到地图中。L.imageOverlay(jpg_url, bounds).addTo(my_map);如果我使用 cache.add 将 jpg 添加到缓存中,然后离线打开地图,则会从缓存中检索jpg_url的图像并显示在地图上。但是,我有一个用例,我想使用 fetch 和 cache.put 而不是 cache.add

答: 暂无答案