К счастью, нам не нужно поддерживать браузеры ниже IE10, поэтому, если вы хотите или достаточно привилегированы, чтобы поддерживать только браузеры, поддерживающие HTML5, должно работать следующее:
/*
* The following is intentional, to force Firefox to run
* this JS snippet after a history invoked back/forward navigation.
*/
window.onunload = function(){};
function formatTime(t) {
return t.getHours() + ':' + t.getMinutes() + ':' + t.getSeconds();
}
if (window.history.state != null && window.history.state.hasOwnProperty('historic')) {
if (window.history.state.historic == true) {
document.body.style.display = 'none';
console.log('I was here before at ' + formatTime(window.history.state.last_visit));
window.history.replaceState({historic: false}, '');
window.location.reload();
} else {
console.log('I was forced to reload, but WELCOME BACK!');
window.history.replaceState({
historic : true,
last_visit: new Date()
}, '');
}
} else {
console.log('This is my first visit to ' + window.location.pathname);
window.history.replaceState({
historic : true,
last_visit: new Date()
}, '');
}
Хорошо,Вот код без комментариев и пометок:
window.onunload = function(){};
if (window.history.state != null && window.history.state.hasOwnProperty('historic')) {
if (window.history.state.historic == true) {
document.body.style.display = 'none';
window.history.replaceState({historic: false}, '');
window.location.reload();
} else {
window.history.replaceState({historic : true}, '');
}
} else {
window.history.replaceState({historic : true}, '');
}
Вставьте его непосредственно перед закрывающим тегом тела, и у вас будет довольно чистое решение.
Это будет работать с любой комбинацией спины/ вперед при нажатии, и в тот момент, когда пользователь попадает на новую страницу, принудительной перезагрузки не происходит.
Подробнее об объекте History в MDN:
MDN - ИсторияОбъект
MDN - Управление историей браузера