"use client"; import { useEffect, useState } from "react"; type InstallPrompt = Event & { prompt: () => Promise; userChoice: Promise<{ outcome: "accepted" | "dismissed" }> }; export default function PwaRegister() { const [prompt, setPrompt] = useState(null); const [isIos, setIsIos] = useState(false); useEffect(() => { if ("serviceWorker" in navigator) navigator.serviceWorker.register("/sw.js", { updateViaCache: "none" }).catch(() => undefined); setIsIos(/iphone|ipad|ipod/i.test(navigator.userAgent)); const receivePrompt = (event: Event) => { event.preventDefault(); setPrompt(event as InstallPrompt); }; window.addEventListener("beforeinstallprompt", receivePrompt); return () => window.removeEventListener("beforeinstallprompt", receivePrompt); }, []); if (!prompt && !isIos) return null; return
把打卡站点安装到桌面,打开更快捷。 {prompt ? : Safari 点“分享”→“添加到主屏幕”}
; }