@barankaescape

Не устанавливается слушатель события при инициализации главного компонента Vue js. Почему так происходит?

Я пытаюсь сделать приложение для telegram на vue js и сталкиваюсь с проблемой при использовании события beforeunload.

Когда я добавляю обработчик beforeunload в методе onMounted, он не срабатывает при первом запуске приложения. Однако после перезагрузки страницы событие начинает работать корректно.

const sendLogoutRequest = () => {
  fetch("http://localhost:3000/lastauth", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      userId: userStore.user.userId,
      authToken: userStore.authToken,
    }),
  }).catch((err) => {
    console.error("Ошибка при отправке запроса:", err);
  });
};

onMounted(async () => {
...
window.addEventListener("beforeunload",  sendLogoutRequest);
})

onBeforeUnmount(() => {
window.removeEventListener("beforeunload", sendLogoutRequest);
})


API телеграма не предоставляет никаких подобных методов и ивентов. В чем может быть причина? В асинхронности монтирования главного компонента?
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
@barankaescape Автор вопроса
Значит ответ до боли прост. Если запускаете приложение в дев моде, то в телеграмовском браузере надо 10 раз дождаться, пока оно отлагает. То ли дело в ngrok, то ли в самом телеграмовском браузере(скорее второе, потому что в хроме все работает великолепно).

В итоге обработчик добавил в onMounted замыкающим звеном, после всех других функций. ВАЖНО!!! обязательно ставить после метода webapp.ready(), который просят вызывать как можно раньше (хотя в документации к сдк говорят вызывать его как можно раньше с поправкой на полную инициализацию приложения).
Ответ написан
Комментировать
Aetae
@Aetae Куратор тега JavaScript
Тлен
Во-первых: вопрос не относится к vue.

Во-вторых: что скрыто за троеточием перед добавлением обработчка? Скорее всего что-то там сыпется и до навешивания просто не доходит.

В-третьих: beforeunload - не надёжен и может вызываться не всегда, в доках рекомендуют к нему не привязываться и по возможности использовать visibilitychange.

В-четвёртых: стандартные http запросы в beforeunload ещё более ненадёжны, доки рекомендуют использовать navigator.sendBeacon.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы