Я попытаюсь изо всех сил объяснить это.
У меня есть приложение, которое показывает 50+ проектов на моей странице view
. Пользователь может щелкнуть по отдельному проекту и перейти на страницу обновления, чтобы обновить информацию о проекте. Все работает отлично, за исключением того, что после того, как пользователь завершит обновление отдельной информации о проекте и нажмите кнопку «назад» в браузере на предыдущую view page
. Старая информация о проекте (до обновления) все еще существует. Пользователь должен нажать обновление, чтобы просмотреть обновленную информацию. Это не так уж плохо, но я хочу обеспечить лучший пользовательский интерфейс. Любая идея исправить это? Большое спасибо.
Я думаю, вы должны работать с JS, чтобы сделать эту работу, поскольку PHP не знает, какие браузерные элементы управления имеют доступ к пользователю …
Возможно, это поможет: http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript
«Fb-cache» может быть очень раздражающим. Вот простой способ javascript:
window.onpageshow = function(evt) { // If persisted then it is in the page cache, force a reload of the page. if (evt.persisted) { document.body.style.display = "none"; location.reload(); } };
Протестировано в Safari 6 и IE10.
Я использую эти четыре строки кода PHP:
// any valid date in the past header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // always modified right now header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); // HTTP/1.1 header("Cache-Control: private, no-store, max-age=0, no-cache, must-revalidate, post-check=0, pre-check=0"); // HTTP/1.0 header("Pragma: no-cache");
Ключ использует предложение «no-store» заголовка Cache-Control.
К счастью, нам не нужно поддерживать браузеры ниже 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() }, ''); }
Ну, вот код без комментариев и flab:
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 – отображение истории браузера
Ну, вы можете либо предоставить встроенную кнопку «Назад» на странице обновлений, которая отправит их ей новой (например, ссылку <a href="<?= $_SERVER['HTTP_REFERRER']; ?>">BACK</a>
или поместите некоторый скрипт на страницу, который заставит его извлекать данные каждый раз, когда пострадает страница, будет ли это новое впечатление или используется кнопка «Назад».
вот решение, которое я использовал на некоторых моих страницах. добавьте это на страницы, на которые сделаны изменения.
window.onbeforeunload = function() { window.name = "reloader"; }
это срабатывает, когда вы покидаете эти страницы. вы также можете запустить его, если произошли изменения. так что он не будет излишне перезагружать страницу, требующую перезагрузки. затем на страницах, которые вы хотите перезагрузить после использования браузера «назад».
if (window.name == "reloader") { window.name = "no"; reloadPage(); }
это вызовет перезагрузку на странице, которую вам нужно перезагрузить, чтобы … надеюсь, это поможет 🙂 oh btw это в js.
if (window.name == "reloader") { window.name = ""; location.reload(); } window.onbeforeunload = function() { window.name = "reloader"; }
Добавьте эти две функции на всех страницах
Это решение, которое я использовал:
<?php session_start(); if (!$_SESSION['reloaded']) {$_SESSION['reloaded'] = time();} else if ($_SESSION['reloaded'] && $_SESSION['reloaded'] == time()) { ?> <script> location.reload(); </script> <?php } ?>
Ни один из вышеперечисленных решений не работал для меня. Это простое решение, размещенное здесь, работало …
Я попытался заставить страницу снова загружаться браузером, когда пользователь нажимает кнопку «Назад», но ничего не работает. Похоже, что у современных браузеров есть отдельный кэш для страниц, в котором хранится полное состояние страницы (включая элементы DOM, созданные с помощью JavaScript), поэтому, когда пользователи нажимают кнопку «Назад», предыдущая страница отображается мгновенно в том состоянии, когда пользователь ее покинул. Если вы хотите заставить браузер перезагружать страницу на кнопку «Назад», добавьте onunload = «» к вашему элементу тела HTML (X):
<body onunload="">
Это отключает специальный кеш и принудительно перезагружает страницу, когда пользователь нажимает кнопку «Назад». Подумайте дважды, прежде чем использовать его. Факт необходимости такого решения – это намек на то, что ваша концепция навигации сайта ошибочна.
сделайте скрытый флажок и используйте ниже код (coffeescript)
window.location.reload() if $("#refreshCheck")[0].checked $("#refreshCheck")[0].checked = true
после нескольких дней поиска в сети, чтобы найти решение, я, наконец, выясню это, добавьте после:
<script> window.onbeforeunload = function(){window.location.reload();} </script>
это будет работать как шарм, который вы мне отблагодарите
этот код будет перезагружать страницу всякий раз, когда вы ее посещаете.
Я использую jquery и php-скрипт для принудительной перезагрузки на подкладке. Часть window.unload нужна только в firefox. Выделенный тайм-аут 1 секунда и часть добавления тела предназначены только для иллюстрации функциональности. window.location.reload (true) даст тот же результат, что и window.location.href = window.location.href;
JQuery:
<script> $(window).unload(function() {}); $.get('h.php',function(data){ if($.trim(data)=='first'){ // $('body').append(data) // setTimeout(function(){ window.location.href = window.location.href; // },1000) } else { // $('body').append(data) } }); </script>
h.php:
<?php session_start(); ?> <?php if(!$_SESSION['reloaded']){ echo 'first'; $_SESSION['reloaded']=1; } else { echo 'second'; unset($_SESSION['reloaded']); } ?>
с<?php session_start(); ?> <?php if(!$_SESSION['reloaded']){ echo 'first'; $_SESSION['reloaded']=1; } else { echo 'second'; unset($_SESSION['reloaded']); } ?>
Вы можете отправлять заголовки HTTP на странице просмотра, которые указывают браузеру, что страница не может быть кэширована. Это означает, что браузеру необходимо будет запрашивать страницу с сервера каждый раз, когда к ней обращаются, что означает, что она всегда отображает актуальную информацию.
Заголовки должны быть отправлены перед любым другим контентом, поэтому поставьте следующее справа вверху страницы просмотра.
header("Cache-Control: no-cache, must-revalidate");