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:
Aqui está minha implementação:
Também é requisitado a implementação do service-worker.js:
Minha implementação do mesmo:
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:
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?