Исправление недостатков программным способом

Понимание причины – отсутствие изменений в строке URL – приводит к простому решению проблемы установки закладок: всякий раз, когда изменяется текущее состояние страницы, информация о состоянии должна помещаться в хеш строки URL текущей страницы. Всякий раз, когда страница загружается после использования закладки, к странице должны применяться данные из хеша URL, чтобы привести ее в состояние, соответствующее моменту установки закладки. Для этого потребуются две части программного кода на JavaScript. Первая часть, что приводится ниже, сохраняет информацию об изменениях состояния странице в хеше:
function somethingChanged() {
location.hash = "#" + getCurrentPageState();
}

Вторая часть запускается при первоначальной загрузке страницы. Если в хеше строки URL присутствует какая?либо информация, она должна быть применена к текущей странице:
function pageLoad() {
if (location.hash.length > 0) {
applyPageState(location.hash);
}
}

Вам необходимо реализовать функции getCurrentPageState() и applyPageState(), что может превратиться в труднопреодолимое препятствие. Основная сложность заключается в том, как сериализовать текущее состояние страницы и поместить его в строку URL, а затем выполнить обратное преобразование и применить информацию о состоянии к странице.


Задача не имеет универсального решения, но вышеприведенный подход к ее решению – общий для всех приложений.

Исправить недостатки в поддержке кнопок Вперед и Назад несколько сложнее. Дело в том, что здесь броузеры ведут себя по-разному. Броузеры семейства Mozilla автоматически создают новую запись в журнале посещений при изменении хеша в строке URL.

Например, представим, что Ajax-приложение последовательно загружает три URL: Page.aspx#1, Page.aspx#2 и Page.aspx#3. Если текущей является страница Page.aspx#3 и пользователь щелкнет на кнопке Назад, броузер загрузит страницу Page.aspx#2. Здесь фактически изменяется только строка URL, а сама страница не перезагружается, поэтому функция pageLoad() не выполняется. Все, что остается делать, – это периодически проверять строку URL и при ее изменении применять новую информацию к странице.

В случае с Internet Explorer придется выполнить ряд дополнительных действий. Броузер компании Microsoft создает новую запись в журнале посещений, только когда отправляется HTTP-запрос. Изменение хеша строки URL не порождает такого запроса, отправки которого нам, конечно, хотелось бы избежать, поскольку это вступает в противоречие с одной из наших основных целей – избегать полной перезагрузки страниц.

Так как это довольно распространенная проблема, существует и способ ее решения.


Если страница содержит плавающий фрейм (HTML-элемент