Как отслеживать закрытие Telegram Web App?
Нужно отслеживать закрытие telegram web app на мобильниках.
Пробовал:
window.addEventListener('beforeunload', (event) => {`...`})
window.addEventListener('unload', (event) => {`...`})
window.addEventListener('visibilitychange', (event) => {`...`})
Ничего не срабатывает на мобильных устройствах. Почитал документацию. В ней нет нужного события, которое можно отловить.
Ответы (2 шт):
Как вариант:
<script>Telegram.WebApp.MainButton
.setText('CLOSE WEBVIEW')
.show()
.onClick(function(){ webviewClose(); });
</script>
<div id="buttons" style="margin-top:100px;">
<button onclick="webviewClose();">Close</button>
</div>
К сожалению, Telegram Web App на мобильных устройствах не предоставляет события, которое напрямую отслеживает закрытие через встроенную кнопку X (в правом верхнем углу)
Я тоже пробовал классические события:
window.addEventListener('beforeunload', ...)
window.addEventListener('unload', ...)
document.addEventListener('visibilitychange', ...)
На мобилных они не срабатывают стабильно (или вовсе не срабатывают)
Что можно сделать?:
- Использовать WebSocket или heartbeat-пинг
Если у вас есть подключение к серверу, можно определить закрытие по разрыву
соединения. Например, WebSocket можно завершать явно, если Web App закрыт.
- Сохранять всё по ходу
Если нужно сохранить состояние – делайте это при каждом взаимодействии
пользователя. Надёжнее, чем надеяться на событие выхода.
- Использовать кастомные кнопки
На Telegram.WebApp.MainButton или Telegram.WebApp.BackButton можно повесить onClick
с вызовом Telegram.WebApp.close(). В этом случае у вас есть контроль над закрытием.
Но именно встроенную X Telegram не даёт отследить - такая возможность просто отсутствует в Telegram Web Apps API на сегодня (либо я реально слепой)
Надеюсь, это сэкономит кому-то часы экспериментов)