46 lines
1.1 KiB
TypeScript
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;
|
|
};
|