Javascript.RU

 
 
Опции темы
 
Старый 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 );
}


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

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

на хабре говорят, что грешит этим только хром, сейчас проверю, кстати. Стало быть можно обойтись костылем для хрома, благо проект не планирует поддерживать старые версии браузеров.
 
Старый 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
 
Старый 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


© Илья Кантор, 2007-2021 О проекте - Архив форума - Вверх