Я работаю с onbeforeunload, и я смог выяснить:
- Обработчик onbeforeunload блокирует браузер от уничтожения текущей страницы
- если вы ничего не вернете, всплывающее окно не появится.
Таким образом, ваш код будет работать до тех пор, пока обработчик событий запускает .
Это означает, что функции таймера не могут использоваться. Они просто добавляют в очередь выполнения, поэтому все, что они будут делать, это ставить в очередь после конца текущего запущенного обработчика, то есть после последнего момента времени, когда вы гарантировали, что ваш код все еще выполняется.
Таким образом, есть только один способ остановить выгрузку браузера до завершения анимации:
- поместить блокирующий цикл, который тратит некоторое время в обработчике
beforeunload
- запустить анимацию CSS3, установив соответствующий класс для элемента перед циклом
- завершить цикл по окончании анимации (сделать проверку фактической высоты элемента или чего-либо еще)
О, и да, это самый неприятный взлом из всех, но я смог найти способ остановить браузер от выгрузки страницы, верно?
Буду признателен за комментарии с идеями о том, что включить в цикл.
Я принимаю во внимание некоторые варианты:
- тратить процессор на математику в больших количествах
- доступ к локальному хранилищу (синхронный вызов, работа ввода-вывода)
- доступ к DOM (это решение уже должно)
Есть идеи?