2009-07-31 15 views
6

W tym momencie mamy galerię zdjęć, która wykorzystuje wartości hash do określenia, które zdjęcie jest aktualnie wyświetlane użytkownikowi i do wspierania wysyłania strony do znajomego i takie. Coś jak:top.location.replace tworzy element historii w Safari/Chrome

http://url/photos/#photo-4

Kiedy załadowaniu odpowiedniego obrazu po kliknięciu przycisku następnego lub poprzedniego, możemy zmienić adres URL według JS 1.1 specyfikacji stosując:

top.location.replace(url.url + hash); 

Nasz chciał zachowanie jest że nie jest tworzony żaden element historii, więc użytkownicy mogą użyć przycisku Wstecz, aby opuścić galerię zdjęć, zamiast używać przycisku Wstecz, aby wyświetlić poprzednie obrazy.

W IE i Firefox metoda działa jak urok, ale Safari i Chrome tworzą element historii dla zmienionego adresu URL. Znalazłem wiele próbek, jak tworzyć elementy historii, gdy używam hasha do nawigacji w ten sposób, ale chcę to zrobić w inny sposób. Jakaś wskazówka?

Odpowiedz

3

To działa zgodnie z oczekiwaniami teraz:

Na Safari [5.1.7] location.replace() działa zgodnie z oczekiwaniami - adres URL jest wymieniony, nic nie jest dodawane do kolejki przycisk Wstecz, a nic nie jest dodawany do menu historii.

Na Chrome [21.0.1180.82] location.replace() jest trochę trudne - URL otrzymuje i nic nie jest dodawane do kolejki przycisk Wstecz, ale to robi dodać element do menu historii.


To, co sprawia, że ​​jest to trudne, to że istnieją dwie odrębne kolejki historii - menu historii i przyciski wstecz/przewijania do przodu. Kliknij i przytrzymaj przycisk Wstecz i Dalej, aby zobaczyć ich kolejkę i porównać z menu Historia.

Kolejka historii przycisków wstecz/dalej jest powiązana z aktywną zakładką. Historia przycisku pozostaje nawet po wyczyszczeniu menu historii - przynajmniej do momentu zamknięcia karty.

0

Czy spoglądasz na przypisywanie hasha przy użyciu window.location.hash = newHash zamiast zastępowania całego adresu URL?

https://developer.mozilla.org/en/DOM/window.location

+0

Tak "Zamień (URL) Zamień bieżący dokument na ten pod podanym adresem URL. Różnica od metody assign() polega na tym, że po użyciu replace() bieżąca strona nie zostanie zapisana w historii sesji, co oznacza użytkownik nie będzie mógł użyć przycisku Wstecz, aby przejść do niego. " I dostałem mój błąd, ponieważ to nie działa w Webkit. –

+0

Ja wyjaśnię moją odpowiedź – MyItchyChin

+1

location.hash tworzy elementy historii we wszystkich głównych przeglądarkach poza IE, więc to nie zadziała :-) –

3

Wydaje się, że żadne rozwiązanie nie w tym momencie.

+0

Dla przypomnienia, to nadal irytujący problem 2 lata później ... Webkit poprawki błędów są nieco powolne. – DarthJDG

Powiązane problemy