AI / sw.js
openfree's picture
fix(sw): v4 - .catch() 체인 제거, actions 없이 μ•ˆμ •ν™”
c9d6ddb verified
Raw
History Blame Contribute Delete
2.23 kB
/* ======================================================
VIDRAFT Service Worker β€” Web Push Notifications v4
v3μ—μ„œ .catch() 체인 제거 (λͺ¨λ°”일 silent-fail 원인)
Windows ν˜Έν™˜: actions 제거 μœ μ§€
====================================================== */
const CACHE_VERSION = 'vidraft-sw-v4';
self.addEventListener('install', () => self.skipWaiting());
self.addEventListener('activate', e => e.waitUntil(self.clients.claim()));
// ── Push μˆ˜μ‹  β†’ μ•Œλ¦Ό ν‘œμ‹œ ────────────────────────────
self.addEventListener('push', (e) => {
let d = {
title: 'VIDRAFT',
body: 'μƒˆ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆλ‹€.',
icon: 'https://vidraft-ai.static.hf.space/favicon.png',
badge: 'https://vidraft-ai.static.hf.space/favicon.png',
image: '',
url: 'https://vidraft.net'
};
if (e.data) {
try { d = { ...d, ...e.data.json() }; }
catch { d.body = e.data.text(); }
}
console.log('[SW v4] push received, title:', d.title);
const options = {
body: d.body,
icon: d.icon,
badge: d.badge,
tag: 'vidraft-push',
renotify: true,
requireInteraction: false,
data: { url: d.url },
// actions 제거 β€” Windows Chrome silent-fail 유발
};
if (d.image && d.image.trim()) {
options.image = d.image.trim();
}
// .catch() 체인 없이 직접 waitUntil β€” κ°€μž₯ μ•ˆμ •μ 
e.waitUntil(self.registration.showNotification(d.title, options));
});
// ── μ•Œλ¦Ό 클릭 β†’ νƒ­ μ—΄κΈ° ─────────────────────────────
self.addEventListener('notificationclick', (e) => {
e.notification.close();
const target = (e.notification.data && e.notification.data.url)
? e.notification.data.url
: 'https://vidraft.net';
e.waitUntil(
self.clients.matchAll({ type: 'window', includeUncontrolled: true })
.then(clients => {
for (const c of clients) {
if (c.url === target && 'focus' in c) return c.focus();
}
if (self.clients.openWindow) return self.clients.openWindow(target);
})
);
});