Для цели вопроса мне нужно создать простой вымышленный сценарий.
У меня есть следующая тривиальная страница с одной ссылкой, назовите ее страницей A:
<a class="red-anchor" onclick="change_color(event);" href="http://mysite.com/b/">B</a>
Со связанной функцией Javascript:
function change_color(e)
{
var event = e || window.event;
var link = event.target;
link.className = "green-anchor";
}
И у меня есть соответствующий CSS, чтобы сделать якорь красным или зеленым на основе имени класса.
Это работает. То есть, когда я нажимаю на якорь, он меняет цвет с красного на зеленый, который кратковременно виден до того, как браузер загрузит страницу B.
Но если я затем использую кнопку НАЗАД, чтобы вернуться на страницу А, я получаю различное поведение в разных браузерах.
- В Safari якорь все еще зеленый (желаемое поведение)
- В Firefox он становится красным
Я полагаю, что Safari каким-то образом обновляет свою кэшированную версию страницы, а Firefox нет.
Итак, мой первый вопрос: есть ли способ заставить FF обновить кэшированную страницу, или здесь что-то еще происходит?
Во-вторых: у меня другая реализация, где я использую ajax-вызов. В этом я установил класс якоря, используя переменную сеанса, что-то вроде ...
<a class="<?php echo $_SESSION["color"]; ?>" ...[snip]... >B</a>
И функция javascript выполняет дополнительный вызов ajax, который изменяет переменную сеанса color.
В этом случае Safari и Firefox работают как положено. При возвращении из B в A цвет все еще зеленый. Но я не могу понять, почему это должно отличаться от случая без AJAX. Я перепробовал много разных перестановок, и чтобы он работал на FF, переменная сеанса "color" ДОЛЖНА изменяться (то есть сам вызов ajax не каким-то образом перезагружает кэш). Но при возвращении НАЗАД страница перезагружается из кэша (проверено в Firebug), так как же страница получает доступ к этой переменной сеанса, если она не обрабатывает страницу и не запускает этот фрагмент php в привязке?
Я полагаю, что здесь должно быть что-то фундаментальное, чего я не понимаю. Любое понимание будет высоко ценится.