Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro no cacheStorage

Galera, já revisei as aulas, limpei o historico do navegador e nada.

Recebo o erro abaixo quando tento cachear as imagens no browser:

Uncaught (in promise) TypeError: Request scheme 'data' is unsupported
    at caches.open.then.cache (Mural.js:33)
    at <anonymous>

Meu código Mural.js

  function preparaCartao(cartao){
        const urlsImagens = Cartao.pegaImagens(cartao)
        urlsImagens.forEach(url => {
          fetch(url).then(resposta => {  
            caches.open("ceep-imagens").then(cache => {       
              cache.put(url, resposta)
              })
          })
        })
4 respostas

Oi Bruno, você pode colar o código completo? Onde esse caches tá sendo criado?

Wanderson, o caches é global, faz parte da Cache Storage API.

Eu consegui reproduzir o erro aqui, já mostro pra vcs o que aconteceu!

solução!

Consegui reproduzir o erro aqui:

Uncaught (in promise) TypeError: Request scheme 'data' is unsupported
    at caches.open.then.cache (Mural.js:18)
    at <anonymous>

O erro foi lançado na hora que ele tentou executar o cache.put(url, resposta). O erro está na url, mais especificamente no scheme dela; a spec chama de scheme a parte da URL onde geralmente a gente vê a informação de qual protocolo está sendo usado, por exemplo, http://.

No caso, o cache.put está dizendo que não aceita o scheme data. Alguma das URLs de imagens que estamos tentando salvar no Cache Storage é uma Data URL, e segundo a spec, o Cache Storage só aceita URLs com scheme http:// ou https://. O pior é que o erro não disse isso pra gente... coisa pro pessoal do Chrome melhorar!

Como uma DataURL contém toda a informação da imagem nela mesma, não é necessário ter acesso a rede para usá-la como src de uma tag <img>. Assim, não precisamos armazenar nada no Cache Storage. O que podemos fazer é filtrar URLs com scheme data:

const urlsImagens = Cartao
    .pegaImagens(cartao)
    .filter(url => !url.match(/^data/))

Opa, boa Art! Estou bem por fora dessa API! rsrs valeu por essa! :)