Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.06.2015, 16:07
Новичок на форуме
Отправить личное сообщение для acteralex Посмотреть профиль Найти все сообщения от acteralex
 
Регистрация: 01.06.2015
Сообщений: 9

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

Может кто сталкивался с этим?
Надеюсь поможете. Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2015, 22:26
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Я сталкивался и выяснил что спина не работает и не должна в общем-то. Все нужно делать явным образом.

Загрузилась страница (или вызвали инит) - 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);
},

Последний раз редактировалось kostyanet, 01.06.2015 в 22:28.
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2015, 22:37
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Другими словами не работает такое понимание что в хистори у вас типа стек и вы можете им манипулировать. Бэки и форварды это седьмая вода на киселе. Они были до пушнины и как там браузеры пришили что было к тому что стало - никто толком не знает. Во всех мануалах пишут одно и то же - явное управление адресом.

В другом месте на онпопстейте висит вызов того же самого загрузчика

onpopstate=function(e){
		get_page(e.state.url,false);
    },


Все, больше вариантов нет. Или вы загружаете следующий ресурс по тому же аяксу и продолжаете прикидываться шлангом в урле, или вы перезагружаете страницу на тот урл, с которого все началось. При этом если юзер нажмет F5 когда у вас левый урл - то же самое должно загрузиться как обычно.

То есть смысл в том, что кнопки Back Forward нажимает юзер, а из кодов вы всегда задаете конкретный адрес.
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2015, 13:15
Новичок на форуме
Отправить личное сообщение для acteralex Посмотреть профиль Найти все сообщения от acteralex
 
Регистрация: 01.06.2015
Сообщений: 9

Сообщение от kostyanet Посмотреть сообщение
onpopstate=function(e){
	location.assign(e.state.url);
},
но
location.assign(url)

перезагружает страницу

Как решить без перезагрузки?
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2015, 11:39
Новичок на форуме
Отправить личное сообщение для acteralex Посмотреть профиль Найти все сообщения от acteralex
 
Регистрация: 01.06.2015
Сообщений: 9

Не работает onpopstate;
Не работает кнопки вперед/назад в браузере.
Ответить с цитированием
  #6 (permalink)  
Старый 05.06.2015, 11:59
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

а как с нативным методом обстоят дела? (без подключения библиотеки от балуптона)?
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 05.06.2015, 12:40
Новичок на форуме
Отправить личное сообщение для acteralex Посмотреть профиль Найти все сообщения от acteralex
 
Регистрация: 01.06.2015
Сообщений: 9

Сообщение от devote Посмотреть сообщение
а как с нативным методом обстоят дела? (без подключения библиотеки от балуптона)?
Честно говоря точно сказать не могу, но процентов на 90% уверен, что будет работать хорошо.

Почему я это решил:
поменял History.back() на window.history.go(-1). И логика работы поменялась. Приложение работает, но не меняется URL.
не меняется state и, соответственно, не работает statechange событие.

Последний раз редактировалось acteralex, 05.06.2015 в 12:45.
Ответить с цитированием
  #8 (permalink)  
Старый 05.06.2015, 13:18
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

используйте нативные методы.. зачем вы используете глючную библиотеку, которую даже разработчики исправлять не хотят.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #9 (permalink)  
Старый 05.06.2015, 13:38
Новичок на форуме
Отправить личное сообщение для acteralex Посмотреть профиль Найти все сообщения от acteralex
 
Регистрация: 01.06.2015
Сообщений: 9

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

возьмите мой shim... он просто добавляет поддержу в старые браузеры... Но при этом вы будете работать с нативными методами.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что за плагин используется для загрузки фотографий? Simon jQuery 0 13.12.2009 17:59