У меня есть веб-сайт, управляемый ajax, где у меня есть два типа страниц, отображаемых пользователю. Для простоты назовем их MAINPAGE s и SUBPAGE s. MAINPAGE s содержит информацию, и SUBPAGE s - это все формы, в которых пользователь может добавить или изменить существующую информацию, например, MAINPAGE.Сделать браузер удаленным определенным состояниям истории
Если мой сайт посетил пользователь с браузером, совместимым с HTML5, я использую HistoryJS для обновления URL-адреса, когда он совершает навигацию на моем веб-сайте. Давайте pressume следующий пример:
Пользователь вошел мой сайт и переходите к следующим страницам в следующем порядке, и его история выглядит примерно так:
MainPage (1) -> MainPage (2) -> SUBPAGE (1) -> SUBPAGE (2)
Когда пользователь заполняет форму на ПОДСТРАНИЦЫ (2), я хочу, чтобы перенаправить его немедленно к последнему MainPage он Vis ITED. Так, например, когда пользователь заполняет форму, я хотел бы, чтобы пользователи история быть этим:
ГЛАВНАЯ СТРАНИЦА (1) -> ГЛАВНАЯ СТРАНИЦА (2)
Визуально Я в состоянии достичь этого, все работает правильно, но потом, в браузере HTML5, если я нажму на встроенную кнопку возврата в браузере, страница попытается вернуться к SUBPAGE (1), правильное состояние возврата из начальной истории .
Можно ли удалить некоторые из состояний истории, и если да, то как я могу это сделать?
Вот код, я использую до сих пор:
ConverserNavigation.prototype.getPreviousMainAction = function() {
// NOTE: the code that deals with non HTML5 compatible browsers,
// was removed because everything works fine there
var startFrom, found=false;
if (this.HistoryJS.status==true) startFrom=History.getState().data.id;
// if browser is HTML5 compatible, get the current state from History object,
// which is a HistoryJS object
while ((!found) && (startFrom>0)) // find the last MAINPAGE visited by user
{
startFrom--;
if (this.historyData[startFrom].pageData.page != 'quickactions') found=true;
}
if (this.HistoryJS.status==true) History.replaceState({id:startFrom}, this.historyData[startFrom].urlData.title, this.historyData[startFrom].urlData.url);
// replace the current history state, with the one to where we want to revert
this.currentNavigationId=startFrom;
this.back(); // render the ui to navigate back to the previous page, works as intended
for (var i=this.currentNavigationId;i<this.historyData.length;i++) delete this.historyData[i]; // delete the unused history data
}