p2p-explorer-web/src/utils/pwa.ts
2025-01-16 14:58:50 +08:00

46 lines
1.1 KiB
TypeScript

// PWA 安装状态
let deferredPrompt: any = null;
// 控制是否显示安装提示
let showInstallPrompt = true;
// 监听 beforeinstallprompt 事件
window.addEventListener('beforeinstallprompt', (e) => {
if (!showInstallPrompt) {
e.preventDefault();
return;
}
deferredPrompt = e;
});
// 检查是否为 PWA 模式
export const isPwa = () => {
return window.matchMedia('(display-mode: standalone)').matches ||
(window.navigator as any).standalone ||
document.referrer.includes('android-app://');
};
// 禁用 PWA 安装提示
export const disablePwaPrompt = () => {
showInstallPrompt = false;
if (deferredPrompt) {
deferredPrompt = null;
}
};
// 启用 PWA 安装提示
export const enablePwaPrompt = () => {
showInstallPrompt = true;
};
// 手动触发 PWA 安装提示
export const showPwaInstallPrompt = async () => {
if (!deferredPrompt) {
console.log('No PWA installation prompt available');
return;
}
deferredPrompt.prompt();
const { outcome } = await deferredPrompt.userChoice;
deferredPrompt = null;
return outcome;
};