Раньше isAvailable=true если window.Telegram.WebApp объект существовал (SDK грузится всегда). Но методы кидали WebAppMethodUnsupported вне Telegram. Теперь: isAvailable=true только если есть initData (мы внутри Telegram) Все методы (close, sendData, haptic, showAlert, showConfirm) — early return если не внутри Telegram.
40 lines
1.2 KiB
JavaScript
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 || {},
|
|
}; |