HTML5 история, съхраняваща само едно състояние

Разработвам AJAX-приложение на Google Maps в JS/PHP и искам да внедря HTML5 History API. Вече внедрих персонализирани дълбоки връзки, така че всичко може да бъде достъпно с красиви URL адреси.

Сега на AJAX get правя следното, за да съхраня историята:

var stateObj = { id: obj.id };
history.pushState(stateObj, null, obj.deeplink);

и за да го изтегля обратно в браузъра, правя:

window.onpopstate = function(event) {
google.maps.event.trigger(markersArray[JSON.parse(event.state.id)], 'click');
};

Съхранява се обаче само 1 стъпка назад, така че когато щракна назад няколко пъти, тя извиква същото, както при първото извикване назад.

Какво не е наред?

Още обяснения

Добре, изглежда, че не съм предоставил достатъчно код. Това е общият onpopstate-listener:

//get popstate event
window.onpopstate = function(event) {
   console.log('onpopstate: '+JSON.parse(event.state.id));
    google.maps.event.trigger(markersArray[JSON.parse(event.state.id)], 'click');
    };

При щракване върху маркер на карта правя следното:

//change URL, save state
history.pushState({ objId: obj.id }, obj.pagetitle, obj.deeplink);

Но, разбира се, задействането на маркер-щракване върху popstate също води до history.pushState, така че мисля, че презаписва последната стойност.

В обекта "история" има само един обект, без значение колко маркера са щракнати.


person Raphael Jeger    schedule 09.04.2015    source източник
comment
Подозирам, че презаписването на stateObj-обекта е проблемът, но си помислих, че pushState няма да замени, а ще избута обектите в хранилището...   -  person Raphael Jeger    schedule 09.04.2015
comment
страхотно, гласуване против без коментар. Само ако можеше да обясниш какво не е наред?!   -  person Raphael Jeger    schedule 09.04.2015
comment
Трудно е да се каже с предоставения от вас код. Какъв е резултатът от stateObj във вашите различни стъпки?   -  person MrUpsidown    schedule 09.04.2015
comment
@MrUpsidown Добавих допълнителна информация, надявам се, че помага.   -  person Raphael Jeger    schedule 09.04.2015
comment
Разгледайте този отговор и евентуално history.js, който може да ви помогне да поддържате различните браузъри.   -  person MrUpsidown    schedule 09.04.2015


Отговори (1)


Вероятно това, което се случва, е, че когато щракнете върху елемента, правите .pushState(), но onpopstate() просто извиквате функцията onclick(), която избутва същата информация за състоянието отново, като ви държи завинаги на този идентификатор.

Като решение трябва да използвате само .pushState() if (history.state.id != this.id) или вашия текущи идентификатор на обект.

person Gungnir    schedule 02.08.2017
comment
Точно това беше проблема. Мерси - person NetVicious; 10.03.2018