PWA - Service Worker does not successfully serve manifest's start_url, No usable web app manifest found on the page.

Como é dito aqui: https://help.vtex.com/pt/tutorial/como-transformar-o-site-da-minha-loja-em-um-pwa

É sabido que é possível transformar meu site em PWA.

No link citado acima pede-se a implementação do manifest.json:

vtex sobre manifest

Aqui está minha implementação:

meu site implementação manifest

Também é requisitado a implementação do service-worker.js:

vtex sobre sw

Minha implementação do mesmo:

meu site implementação sw

No meu site tenho um script que é comum em todas as páginas no meu site, seu nome é "cb--common-script.js", em uma parte deste arquivo é rodado o script para registrar o service-worker.js, mostro-lhes abaixo:

const ready = fn => { if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading") { fn() return } document.addEventListener('DOMContentLoaded', fn) } const setPwa = () => { const pwaPrompt = document.querySelector(".pwa-prompt-container") const setBottomOfPrompt = value => pwaPrompt.style.bottom = value const setPromptClose = () => pwaPrompt.querySelector('i').addEventListener('click', () => setBottomOfPrompt("-80px")) const setPromptAdd = () => pwaPrompt.querySelector('div > div > div').addEventListener('click', (e) => { // hide our user interface that shows our A2HS button setBottomOfPrompt("-80px") // Show the prompt deferredPrompt.prompt() // Wait for the user to respond to the prompt deferredPrompt.userChoice .then(choiceResult => { let message = "User dismissed the A2HS prompt" if (choiceResult.outcome === 'accepted') message = "User accepted the A2HS prompt" console.log(message) deferredPrompt = null }) }) const setBeforeInstallPrompt = () => window.addEventListener('beforeinstallprompt', e => { e.preventDefault() handler.deferredPrompt = e setBottomOfPrompt("0px") }) setServiceWorker() if (pwaPrompt) { setPromptClose() setPromptAdd() setBeforeInstallPrompt() } } ready(() => { try { setPwa() } catch (error) { handler.error(error) } })

O código não apresenta a mesma hierarquia, apresentei a vocês deste modo apenas para abstrair código não interessante ao problema.

Mesmo fazendo, ao meu ver, tudo corretamente, o audit do Lighthouse continua me mostrando isto:

lighthouse sobre pwa

Assim fazendo com que o evento "beforeinstallprompt" presente em "cb--common-script.js" nunca aconteça, logo, nunca perguntando ao usuário se o mesmo deseja adicionar meu site à sua tela inicial.

O que estou fazendo de errado?

@Nathan Prestes​ Já presenciou algo assim?

up

Nunca passei por isso.

up

up

up

up

up

hello, I think you need to first register the service worker in a scope like this:

if ("serviceWorker" in navigator) { navigator.serviceWorker .register("/files/service-worker.js", { scope: "/" }) .then(function () { console.log("Service worker registered!"); }); }