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

Não consigo adicionar conteúdo ao cache-storage

Prezados,

fiz o exercício conforme segue, porém não estou conseguindo adicionar conteúdo ao cache-storage.

Minha função que processa as urls do cartão ficou assim:

    function addEvents(cartao) {
        const urlsImagens = Cartao.pegaImagens(cartao);
        console.log('Adicionando imagem ao cachestorage');
        urlsImagens.forEach(url => {
            fetch(url).then(resposta => {
                console.log('abrindo cache')
                caches.open("ceep-imagens").then(cache => {
                    console.log(`valor adicionado ao cache: ${url}`)
                    cache.put(url, resposta);
                });
            });
        });

        cartao.on("mudanca.**", saveCartoes)
        cartao.on("remocao", ()=>{
            cartoes = cartoes.slice(0)
            cartoes.splice(cartoes.indexOf(cartao),1)
            saveCartoes();
            render();
        })
    }

Ao executar o fetch em uma imagem qualquer, acontece o seguinte:

fetch('http://iordanou.org/wp-content/uploads/2015/04/hero-307036_640.png').then(r=> console.log(r))

Fetch API cannot load http://iordanou.org/wp-content/uploads/2015/04/hero-307036_640.png. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://iordanou.org' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. (index):1 Uncaught (in promise) TypeError: Failed to fetch

Estou rodando com o mesmo servidor (http-server), porém toda hora está dando erro de CORS.

Vi que há um parâmetro que permite desabilitar CORS no fetch, ficando a chamada assim:

            fetch(url, {'mode': 'no-cors'}).then(resposta => {

Porém, apesar de logar todas as mensagens (inclusive valor adicionado ao cache:, com a url da imagem), mas na aba application do chrome, em cache storage, nenhum cache é criado... Alguém já passou por algo assim? O que está errado aqui?

2 respostas
solução!

Fala Jefferson tudo bom?

Bom, pelo que vi você está tentando testar o código em produção. Para poder utilizar os recursos do cache-storage, é necessário que esteja habilitado o https no servidor.

Em meus testes o erro que apareceu foi especificando justamente esse problema:

"DOMException: Failed to execute 'open' on 'CacheStorage': Only secure origins are allowed (see: https://goo.gl/Y0ZkNV)."

Mario, fiquei alguns dias sem mexer no projeto. Hoje quando fui rever o problema, ao subir a aplicação tudo funcionou. Não usei https, rodei da mesma forma como antes (http-server) e agora deu certo...

Vi que tiveram atualizações no browser, pode ter sido algo relativo ao mesmo...

De qualquer forma, obrigado pela ajuda