Ответ 1
Когда пользователь нажимает кнопку "Назад", вы получите тот же документ, что и раньше (старая страница, которая была приостановлена). Поэтому, если вы обрабатываете событие onpagehide
и делаете некоторые изменения на странице перед переходом на новую страницу, ваши изменения сохраняются там.
Я попытался добавить блок script к body
непосредственно перед навигацией:
if (isSafari) {
window.addEventListener('pagehide', function(e) {
var $body = $(document.body);
$body.children().remove();
$body.append("<script type='text/javascript'>window.location.reload();<\/script>");
});
}
это не работает, потому что script немедленно выполняется, когда я собирался выполнить его, когда пользователь вернется на страницу.
НО, если вы отложите свои изменения DOM после выхода pagehide
обратного вызова (что-то вроде этого):
if (isSafari) {
window.addEventListener('pagehide', function(e) {
var $body = $(document.body);
$body.children().remove();
// wait for this callback to finish executing and then...
setTimeout(function() {
$body.append("<script type='text/javascript'>window.location.reload();<\/script>");
});
});
}
TADA работает! как только пользователь нажимает кнопку "Назад" на следующей странице, Safari загружает приостановленную страницу и выполняет этот новый блок script, который ранее не выполнялся.