buhapp-telegram/public/js/tg.js
root 2af273ffbe Fix TG WebApp: isAvailable только если есть initData
Раньше isAvailable=true если window.Telegram.WebApp объект существовал
(SDK грузится всегда). Но методы кидали WebAppMethodUnsupported вне Telegram.

Теперь: isAvailable=true только если есть initData (мы внутри Telegram)
Все методы (close, sendData, haptic, showAlert, showConfirm) — early return если не внутри Telegram.
2026-08-20 22:06:11 +00:00

40 lines
1.2 KiB
JavaScript

// Telegram WebApp SDK обёртки
const TG = window.Telegram?.WebApp;
// isAvailable — только если есть initData (значит мы внутри Telegram)
const TG_AVAILABLE = !!(TG && TG.initData);
window.TG_APP = {
initData: TG?.initData || '',
initDataUnsafe: TG?.initDataUnsafe || {},
user: TG?.initDataUnsafe?.user || null,
colorScheme: TG?.colorScheme || 'light',
isAvailable: TG_AVAILABLE,
close: () => { if (TG_AVAILABLE) TG.close(); },
sendData: (data) => { if (TG_AVAILABLE) TG.sendData(JSON.stringify(data)); },
haptic: (type) => {
if (!TG_AVAILABLE) return;
try {
TG.HapticFeedback?.impactOccurred(type || 'light');
} catch (e) {}
},
showAlert: (msg) => {
try {
if (TG_AVAILABLE && TG.showAlert) TG.showAlert(String(msg));
else alert(String(msg));
} catch (e) {
try { alert(String(msg)); } catch {}
}
},
showConfirm: (msg) => {
try {
if (TG_AVAILABLE && TG.showConfirm) return new Promise((r) => TG.showConfirm(msg, r));
return Promise.resolve(confirm(String(msg)));
} catch (e) {
try { return Promise.resolve(confirm(String(msg))); } catch { return Promise.resolve(false); }
}
},
theme: () => TG?.themeParams || {},
};