2014-04-09 23 views
6

Mam tablicę stanów i indeksów tablicy w history.state i na popstate Czytam zawartość tablicy, działa dobrze, ale kiedy wracam na pierwszą stronę i odświeżam tablica zniknęła (co jest normalne), ale pozostały stan historii przekazywania.Wyczyść historię html utworzoną przez pushState podczas odświeżania

Czy możliwe jest usunięcie fałszywej historii utworzonej za pomocą funkcji pushState?

Nie mogę zapisać mojego stanu w localStorage, ponieważ mam funkcje w mojej tablicy stanów.

+0

można ustawić nowy stan używając pushState lub replaceState na pageload będzie usunąć historię do przodu. – LawfulHacker

Odpowiedz

7

Jeśli czytasz specification of History API for pushState, w punkcie 4 stwierdza

  1. Jeśli metoda wywoływana była metoda pushState():
    Usuń wszystkie wpisy w kontekście przeglądania tych historia sesji po bieżącym wpisie. Jeśli bieżący wpis jest ostatnim wpisem w historii sesji, żadne wpisy nie zostaną usunięte.

więc w zależności od tego, co starają się zrobić, można zrobić Szczególny przypadek kiedy pierwszy ładowania strony i wcisnąć stan (jeden będzie rozważyć swój pierwszy), w ten sposób jasne przednie stany historii.

+2

Prawie praca, ale kiedy tworzę pushState onInit (odśwież), mam dwie strony w historii, oryginalną prawdziwą stronę i fałszywą z pushState. replaceState również nie działają, ponieważ nie powoduje wyczyszczenia historii tylko zmienić bieżącą. To nie jest doskonałe, ale prawdopodobnie nie możesz zrobić nic lepszego. – jcubic

2

Nie ma sposobu na wyczyszczenie historii sesji lub wyłączenie nawigacji wstecz/do przodu z nieuprzywilejowanego kodu. Najbliższym dostępnym rozwiązaniem jest metoda location.replace(), która zastępuje bieżący numer pozycji historii sesji z podanego adresu URL. Mozilla

Jedynym sposobem jest to (ale myślę, że go znamy)

var length=history.length;  
history.go(-length); 
window.location.replace("urlToRedirect"); 

po użyciu wymienić() bieżąca strona nie zostanie zapisana w historii sesji, co oznacza, że ​​użytkownik nie będzie być w stanie użyć przycisku Wstecz, aby przejść do niego.

+0

Użytkownik może jednak przejść do przodu, ponieważ zamiana nie spowoduje usunięcia historii z wyprzedzeniem. – modiX

2

Mój pomysł - przesłonić całą historię:

for (i = 0; i < 50; i++) { 
 
    history.pushState({}, ''); 
 
}