Как сделать так, чтобы Firefox перезагружал страницу при нажатии кнопки «Назад»? - PullRequest
9 голосов
/ 08 января 2011

Я пробовал каждую комбинацию и перестановку метатегов, которые должны помешать кэшированию страницы, но Firefox все равно кэширует страницу! Мне просто нужно перезагрузить URL, когда пользователь нажимает кнопку «Назад». Прекрасно работает в IE8.

Я перепробовал все эти ...

<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="-1"/>
<meta http-equiv="Expires" content="Sat, 1 Jan 2000 00:00:00 GMT" /> 

... и я также попробовал следующий JavaScript ...

<input type="hidden" id="refreshed" value="no"/>
<script type="text/javascript">

    onload=function(){
        var e=document.getElementById("refreshed");
        if(e.value=="no"){
            e.value="yes";
        }

        else{
            e.value="no";
            location.reload();
        }

    }

</script> 

... все безрезультатно.Что мне здесь не хватает?Страницы генерируются с помощью PHP, если это имеет значение.

ОБНОВЛЕНИЕ 1:

До сих пор я пробовал каждое предложение, но все еще не могу заставить это работать.Когда я использую PHP-код Криса, я использую его следующим образом ...

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<!--the rest of my page-->

.. и, как вы можете видеть, он находится в верхней части моей веб-страницы, перед заголовком DOCTYPE.

Я также экспериментировал с session_start(), но даже после прочтения руководства я не уверен, что я правильно его использую.Я также поместил это прямо в самый верх моей страницы.

Я открыт для ЛЮБЫХ ПРЕДЛОЖЕНИЙ, которые делают эту работу, не нарушая другие функциональные возможности страницы.Я знаю, что видел страницы, которые перезагружаются КАЖДЫЙ РАЗ, когда используется кнопка «назад», КАК ОНИ ДЕЛАЮТ ЭТО?!

РЕШЕНО!

Оказывается, у меня былонесколько проблем работали против меня, но благодаря должной осмотрительности я смог устранить эти проблемы и выйти победителем.

После того, как Крис обновил свой код до ...

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
echo time();
?><a href="http://google.com">aaaaaaaaaaaaa</a>

, я обнаружил, что его коддействительно работал, когда я использовал это ТОЧНО, как у него это было НИЧЕГО, но когда я помещал это в свои страницы, это не работало.Все мои страницы либо .php, либо .html, и все они прикреплены к DWT (динамическому веб-шаблону), поэтому я обновил их все сразу с помощью кода Криса.Чего я не понял, так это того, что DWT запускается ПРАВО ПОСЛЕ заголовка DOCTYPE, поэтому код никогда не вставлялся в мои страницы.Я не смог найти способ включить в DWT заголовок DOCTYPE, поэтому я вошел на все свои страницы и вручную вставил код над заголовком DOCTYPE.

Затем я обнаружил, что, хотя мой сервер настроенпри синтаксическом анализе .htm и .html как .php страницы .html генерировали ошибку в том самом месте, где я вставил код Криса, говоря что-то вроде «не может изменить заголовки, заголовки уже отправлены».Мне было все равно, какие у меня были расширения, поэтому я просто изменил все свои .html расширения на .php расширения.

Последнее незначительное раздражение заключалось в том, что хотя страница теперь не кэшировалась (точно так же, какЯ хотел) Firefox размещал пользователя в его последнем месте на предыдущей странице, когда он использовал кнопку «Назад» (то есть, если пользователь находился в нижней части страницы «а» при переходе на страницу «б», то пользователь использовал кнопку «Назад» на странице).б они будут возвращены в конец страницы а, а не в верх страницы а, как нужно).Обрезка моего исходного JavaScript исправила это ...

    <script type="text/javascript">

        onload=function(){
            document.getElementById('content').scrollTop=0;
        }

    </script>

Хотя это кажется очень сложным для такой простой проблемы, я рад, что она исправлена.Спасибо всем за помощь (особенно Крис).

Ответы [ 7 ]

9 голосов
/ 08 января 2011

Это работает для меня

создать новый файл php. Я могу использовать кнопки «назад» и «вперед», а номер на странице всегда обновляется

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
echo time();
?><a href="http://google.com">aaaaaaaaaaaaa</a>
3 голосов
/ 22 сентября 2014

Вы можете добавить следующий PHP-код на свою страницу PHP.

CodeIgniter Framework version:
$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false);
$this->output->set_header('Pragma: no-cache');

Версия PHP:

header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0',false);
header('Pragma: no-cache');

А также вы можете добавить следующий код скрипта Java на странице входа / главной страницы в <head> Раздел:

<script language="javascript" type="text/javascript">
    window.history.forward();
</script>

Совместимость подтверждена в

  • Internet Explorer
  • Google Chrome
  • Mozilla Firefox
  • Опера
0 голосов
/ 08 января 2011

Вы отправили комментарий:

Поскольку после отправки формы пользователь нажимает кнопку "Назад", просматриваемая информация становится неточной.

Если вы хотите предотвратить это, вы делаете это неправильно!:)

Что вам нужно сделать, это перенаправление, когда форма была отправлена.

<?php
    // code that handles the form submit
    header("Location: http://www.example.com/form-success.html"); // needs the absolute url (You can use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() for this)
    exit; // prevents further execution of the php code when while doing to redirect
?>
0 голосов
/ 08 января 2011

Почему? Я имею в виду, почему ты хочешь это сделать? Когда я нажимаю кнопку «Назад», я хочу, чтобы стандартная функция, которую предоставляет браузер, - вернуться на предыдущую страницу. Я не хочу сюрприз.

Если это остановить случайную повторную отправку POST, это можно легко сделать, завершив обработку POST перенаправлением для отображения нужного ответа с помощью GET. Позже, вернувшись на эту страницу, вы снова увидите перенаправленный GET (или перезагрузите его из кэша, который должен иметь тот же результат). Это то, что пользователь ожидает и безвреден.

Это дает дополнительное преимущество: если при обновлении базы данных произошла ошибка сохранения, на дисплее отобразится то, что находится в базе данных, а не то, что осталось в переменных.

0 голосов
/ 08 января 2011
session_cache_limiter('nocache');

Это должно автоматически генерировать все необходимые заголовки.Обратите внимание, что некоторые браузеры, такие как Opera, по-прежнему игнорируют их при использовании кнопки «Назад».

РЕДАКТИРОВАТЬ

Соответствующие заголовки выглядят следующим образом, если вы хотите сгенерироватьих другим способом:

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
0 голосов
/ 08 января 2011
<meta http-equiv="Cache-Control" content="no-cache" />

Я думаю, что правильное значение "no-cache"

0 голосов
/ 08 января 2011

Проверьте заголовки HTTP в реальном времени, вы увидите, когда вы нажмете кнопку «Назад», запрос не сделан. Что сделано специально, чтобы вы не потеряли то, что могли набрать в форме.

Редактировать

В каком-то посте об обмене экспертами говорилось, что это работает, но с 2006 года.

<META HTTP-EQUIV="Expires" CONTENT="0">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store">

Затем обновление JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...