History.js (используется нативный window.history)
Привет всем!
У меня есть проблема. Я использую history.js (https://github.com/browserstate/history.js/). 1) я захожу на страницу www.site.ru/employee 2) затем захожу на страницу www.site.ru/employee/id по клику всплывает модальное окно. Код: History.pushState({}, '', '') 3) на событие, которые закрывает модальное окно повешено следующее: Код: History.back() 4) В итоге я остаюсь на странице www.site.ru/employee/id, а должен был перейти сюда www.site.ru/employee. Обычно работает все верно, но, google chrome иногда (как повезет, 1 раз из 1ого, 1 из 10 и даже 1 из 30 раз) зависает и не хочет работать со стэйтами... После проверки оказалось, что: 1) History.busy() = true 2) событие popstate/statechange не срабатывает 3) History.getState().id == history.state Может кто сталкивался с этим? Надеюсь поможете. Спасибо! |
Я сталкивался и выяснил что спина не работает и не должна в общем-то. Все нужно делать явным образом.
Загрузилась страница (или вызвали инит) - cur={url:location.href,title:D.title}; и следом заменили чтоб спины не было - history.replaceState(cur,cur.title,cur.url); Надо закрыть модальное окно - history.replaceState(cur,cur.title,cur.url); Соответственно в онпопстейт либо загрузка по урлу - канонично, либо тот же самый возврат через замену. У меня канонично onpopstate=function(e){ location.assign(e.state.url); }, |
Другими словами не работает такое понимание что в хистори у вас типа стек и вы можете им манипулировать. Бэки и форварды это седьмая вода на киселе. Они были до пушнины и как там браузеры пришили что было к тому что стало - никто толком не знает. Во всех мануалах пишут одно и то же - явное управление адресом.
В другом месте на онпопстейте висит вызов того же самого загрузчика onpopstate=function(e){ get_page(e.state.url,false); }, Все, больше вариантов нет. Или вы загружаете следующий ресурс по тому же аяксу и продолжаете прикидываться шлангом в урле, или вы перезагружаете страницу на тот урл, с которого все началось. При этом если юзер нажмет F5 когда у вас левый урл - то же самое должно загрузиться как обычно. То есть смысл в том, что кнопки Back Forward нажимает юзер, а из кодов вы всегда задаете конкретный адрес. |
Цитата:
location.assign(url) перезагружает страницу Как решить без перезагрузки? |
Не работает onpopstate;
Не работает кнопки вперед/назад в браузере. |
а как с нативным методом обстоят дела? (без подключения библиотеки от балуптона)?
|
Цитата:
Почему я это решил: поменял History.back() на window.history.go(-1). И логика работы поменялась. Приложение работает, но не меняется URL. не меняется state и, соответственно, не работает statechange событие. |
используйте нативные методы.. зачем вы используете глючную библиотеку, которую даже разработчики исправлять не хотят.
|
Цитата:
|
возьмите мой shim... он просто добавляет поддержу в старые браузеры... Но при этом вы будете работать с нативными методами.
|
Часовой пояс GMT +3, время: 01:30. |