2016-03-03 3 views
2

У меня есть главная страница, где вы можете загружать другие страницы в контейнер. Когда страница загружена, вы все еще находитесь на главной странице, но URL-адрес браузера должен быть установлен на URL-адрес загруженной страницы. При закрытии загруженной страницы URL-адрес должен быть сброшен на адрес главной страницы.Предотвращение дублирования экземпляров в window.history

Я хотел бы решить это, просто используя history.replaceState или pushState, и не нужно возвращаться в историю браузера (потому что возврат обратно заставляет некоторые браузеры обновляться и сбрасывать прокрутку).

Мое текущее решение

clickLoadPage => (pageUrl) { 
    closeOtherLoadedPages(); 
    if (isOnMainPage()) 
     pushState(pageUrl) 
    else 
     replaceState(pageUrl) 
} 
clickUnloadPage =>() { 
    replaceState(mainpageUrl); 
} 

Примечание: Он предназначен для только одной страницы, загруженной в любое время. Пример: первая загрузка страницы1. Затем загрузите страницу2. Желаемый эффект: страница 1 закрыта, URL-адрес заменен на страницу2. В этом состоянии возврат в браузере вернется к URL главной страницы.

Проблема заключается в том, что каждый раз, когда вы загружаете новую страницу и закрываете ее, в историю окон добавляется новое состояние с главной страницей. Там должно быть только 1 из этих состояний, но я получаю несколько.

Можно ли решить эту проблему другим способом? Я не так хорошо знаком с api window.history, возможно ли сделать что-то вроде удаления состояния или обеспечения того, чтобы не было добавлено состояний дубликатов?

ответ

0

Когда страница закрывается, вы можете вызвать метод pop из истории, поэтому URL-адрес изменится на предыдущий.

Если вы открыли страницу 1, и вы хотите открыть страницу 2, вам нужно вызвать метод, чтобы закрыть уже открытую страницу, чтобы просмотреть состояние из истории, и только после этого откройте другую страницу.

+0

Я пошел с этим решением, был единственным способом избежать добавления слишком много состояний истории. – Drkawashima

+0

Просто подсказка для других, кто читает это: когда вы используете использование replace и back, чтобы перейти к одному URL-адресу несколько раз, каждый шаг, который вы нажимаете или заменяете на window.history, должен быть уникальным - в противном случае API API считается им дубликатов, и вы можете получить странное поведение для кнопки «Назад». Я решил это, добавив datetime.now ко всем объектам, которые я нажимаю/заменяю в window.history – Drkawashima