Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2013, 18:21
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

window.onpopstate только на обработку "вперед/назад" браузера
Всем привет. Сейчас имею интимные отношения с задачкой по переводу одного проекта в формат SingePageApplication. Т.е. чтобы весь контент абсолютно доставлялся клиенту без перезагрузки страницы. Учитывая, что проект довольно большой и с сложившейся структурой и функционалом, особенно на бэкэнде, некоторые проблемы приходится решать раком. В частности столкнулся вот с какими граблями и никак не могу их обойти:

для того, чтобы аяксом нормально обрабатывать не только действия связанные с жамканьем на ссылки, но и события браузера "вперед/назад" был добавлен от такой кусочек кода:

window.onpopstate = function( e ) {
    e.preventDefault();
    var returnLocation = history.location || document.location;
    singlePage.switchToPage( returnLocation.pathname );
}


Проблема в том, что он срабатывает не только при переходе вперед/назад, но и при первой загрузке по прямой ссылке. Т.е. если мы тупо переходим в новой вкладке на какой-то адрес проекта, этот код все-равно отрабатывает. Вот сижу и пытаюсь придумать как от этой ненужности избавиться. Может кто подскажет что-нибудь дельное?
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2013, 18:32
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

http://habrahabr.ru/post/123106/#comment_4035036

на хабре говорят, что грешит этим только хром, сейчас проверю, кстати. Стало быть можно обойтись костылем для хрома, благо проект не планирует поддерживать старые версии браузеров.
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2013, 18:40
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от rockerror
на хабре говорят, что грешит этим только хром
верно говорят, этим недугом обладает хром и сафари вроде, хотя точно не помню... обходил данный косяк таким образом:
window.onload = function() {
    setTimeout(function() {
        window.onpopstate = function() {
            // ...
        }
    }, 0);
}
вот тут можно более подробно изучить код https://github.com/devote/HTML5-Hist...y.js#L726-L741
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2013, 18:54
Аспирант
Отправить личное сообщение для rockerror Посмотреть профиль Найти все сообщения от rockerror
 
Регистрация: 07.11.2011
Сообщений: 54

Спасибо!) Помогло)) Думал будет косяк с тем, что на popstate завязано еще однин функционал, который писал не я, но взлетело и с ним тоже))

Последний раз редактировалось rockerror, 23.07.2013 в 18:57.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение размера окна браузера pv! Общие вопросы Javascript 10 29.09.2019 08:45
Измнение адресной строки браузера ketovchanin Элементы интерфейса 14 18.01.2014 14:40
Только один из трех элементов может быть активен Volchen0ck Events/DOM/Window 5 27.01.2013 17:05
Как можно изменить URL в адресной строке браузера? балерун Events/DOM/Window 12 17.11.2009 13:08
Как сделать чтобы text() брал только текст родителя без текста вложенных контейнеров? Andrey32 jQuery 3 23.05.2009 01:33