From 2af273ffbe337fa164c8659e7d76308d894b5b59 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 20 Aug 2026 22:06:11 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20TG=20WebApp:=20isAvailable=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20initData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Раньше isAvailable=true если window.Telegram.WebApp объект существовал (SDK грузится всегда). Но методы кидали WebAppMethodUnsupported вне Telegram. Теперь: isAvailable=true только если есть initData (мы внутри Telegram) Все методы (close, sendData, haptic, showAlert, showConfirm) — early return если не внутри Telegram. --- public/js/tg.js | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/public/js/tg.js b/public/js/tg.js index 22c8aa6..d06f2d3 100644 --- a/public/js/tg.js +++ b/public/js/tg.js @@ -1,9 +1,7 @@ // Telegram WebApp SDK обёртки const TG = window.Telegram?.WebApp; -if (TG) { - TG.ready(); - TG.expand(); -} +// isAvailable — только если есть initData (значит мы внутри Telegram) +const TG_AVAILABLE = !!(TG && TG.initData); window.TG_APP = { initData: TG?.initData || '', @@ -11,22 +9,31 @@ window.TG_APP = { user: TG?.initDataUnsafe?.user || null, colorScheme: TG?.colorScheme || 'light', - isAvailable: !!TG, + isAvailable: TG_AVAILABLE, - close: () => TG?.close(), - sendData: (data) => TG?.sendData(JSON.stringify(data)), + 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'); + TG.HapticFeedback?.impactOccurred(type || 'light'); } catch (e) {} }, showAlert: (msg) => { - if (TG?.showAlert) TG.showAlert(msg); - else alert(msg); + try { + if (TG_AVAILABLE && TG.showAlert) TG.showAlert(String(msg)); + else alert(String(msg)); + } catch (e) { + try { alert(String(msg)); } catch {} + } }, showConfirm: (msg) => { - if (TG?.showConfirm) return new Promise((r) => TG.showConfirm(msg, r)); - return Promise.resolve(confirm(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 || {},