У нас есть vue работник службы пожарной базы, которому необходимо перезвонить в основное vue приложение. Согласно моим исследованиям, вы можете сделать это с помощью функции postMessage () следующим образом:
// firebase-messaging-sw.js
addEventListener('fetch', event => {
event.waitUntil(
(async function() {
// Exit early if we don't have access to the client.
// Eg, if it's cross-origin.
if (!event.clientId) return
// Get the client.
const client = await clients.get(event.clientId)
// Exit early if we don't get the client.
// Eg, if it closed.
if (!client) return
// Send a message to the client.
client.postMessage({
msg: 'Hey I just got a fetch from you!',
url: event.request.url
})
})()
)
})
Вы обрабатываете сообщение в основном приложении так:
// main.js
navigator.serviceWorker.addEventListener('message', event => {
console.log('Url', event.data.url)
console.log('msg', event.data.msg)
})
Проблема в том, что postMessage () должен вызываться для объекта client, и вы получаете объект client в событии fetch, но vue, похоже, ничего не извлекает, поскольку это одностраничное приложение. Так как я могу получить клиента? и как мне отправить сообщение в основное приложение?