Javascript.RU

введение в history API

С появлением HTML5 появилась возможность управлять адресной строкой без location.hash и отслеживать нажатие кнопок <назад> и <вперед> в браузере. На данный момент это работает только в Mozilla Firefox с версии 3.7 и во всех версиях Google Chrome. Это позволяет перевести свой сайт полностью на ajax, загружая только нужные части сайта, что тратит меньше процессорного времени сервера и трафика пользователя (если у него лимитный интернет).
Как же использовать эту «фичу»?

  • Часть адреса после "#" (hash) не отправляется на сервер, что создает трудности при прямом переходе по такой ссылке. С history API же таких трудностей не возникает.
  • Чтобы отследить изменение hash нужно ставить интервал (setInterval()) и сравнивать текущий hash с записанным ранее.В history API можно поставить обработчик на навигационные кнопки.

Попробуем просто изменить адресную строку в браузере. Открываем консоль Chrome или же FireBug если у вас Mozilla.

history.pushState(null,null, 'newAdress');

Если в адресной строке только название сайта,символ "#" или GET запрос, то адрес будет "site.ru/newAdress". Если же в адресе есть только указания пути к файлу или имитация этого с помощью mod_rewrite, например "site.ru/users/user1", то адрес изменится только после последнего слэша, то есть станет "site.ru/users/newAdress".
Кстати, есть способ проверить поддержку history API в браузере и, если не работает, использовать location.hash.

var histAPI=!!(window.history && history.pushState);

histAPI==true если поддерживается history API, иначе false.

Теперь о том, как использовать эту функцию.

function go(link) 
{ 
link.addEventListener 
( 
"click",  
function(e) { 
history.pushState(null, null, link.href); 
//ajax загрузка нужной части сайта. 
e.preventDefault();//снятие стандартного действия ссылки 
}, 
true 
) 
}

и в window.onload пишем

window.onload=function(){ 
go(document.getElementById('link1')); 
go(document.getElementById('link2')); 
}

Здесь мы привязали к клику по нужной нам ссылке нужное действие.

Теперь разберемся с нажатиями кнопок <вперед> и <назад> в браузере.
Опять же в window.onload пишем вот такой код

window.onload=function(){ 
window.setTimeout( 
function()  
{ 
window.addEventListener( 
"popstate",  
function(e) { 
//ajax загрузка нужной части сайта. 
e.preventDefault(); 
},  
false 
); 
}, 
 1); 
}

Функция устанавливает обработчик клика на кнопку назад и снимает с него стандартное действие.

Спасибо за прочтение.

+12

Автор: da_ff, дата: 16 мая, 2011 - 12:18
#permalink
go(document.getElementById['link1']);

поправьте пожалуйста.


Автор: Антон1 (не зарегистрирован), дата: 3 июня, 2014 - 17:48
#permalink

history API почему-то не работает в Мозилле.
Например:
window.onload=function(){
window.addEventListener("popstate", function(e) {
alert(1);
}, false);}
не срабатывает.


Автор: Гость (не зарегистрирован), дата: 3 июля, 2015 - 20:03
#permalink

простите пожалуста, но за такое форматирование кода, точнее НЕ форматирование, убивать надо.
это ж кошмар пытаться прочесть.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
2 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
pharrell
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum