top.location.replace создает элемент истории в Safari/Chrome

На данный момент у нас есть фотогалерея, которая использует хэш-значения для определения того, какое изображение в данный момент отображается пользователю, и для поддержки отправки страницы другу и тому подобное. Что-то типа:

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

Когда мы загрузили соответствующее изображение после нажатия кнопки «Далее» или «Предыдущий», мы меняем URL-адрес в соответствии со спецификацией JS 1.1, используя:

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

Наше желаемое поведение заключается в том, что элемент истории не создается, поэтому пользователи могут использовать кнопку «Назад», чтобы покинуть фотогалерею, вместо использования кнопки «Назад», чтобы просмотреть предыдущие изображения.

В IE и Firefox этот метод работает как шарм, но Safari и Chrome создают элемент истории для измененного URL-адреса. Я нашел много примеров того, как создавать элементы истории при использовании хэша для навигации, но я хочу сделать это по-другому. Любая подсказка?


person Jan Jongboom    schedule 31.07.2009    source источник


Ответы (3)


Теперь это работает так, как ожидалось:

В Safari [5.1.7] location.replace() работает должным образом: URL-адрес заменяется, ничего не добавляется в очередь кнопки «Назад» и ничего не добавляется в меню истории.

В Chrome [21.0.1180.82] location.replace() немного сложнее — URL-адрес заменяется, и ничего не добавляется в очередь кнопки «Назад», но добавляет элемент в историю. меню.


Что делает это сложным, так это то, что есть две разные очереди истории — меню истории и кнопки «назад / вперед». Нажмите и удерживайте кнопки «назад» и «вперед», чтобы просмотреть их очередь и сравнить с меню истории.

А очередь истории кнопок назад/вперед привязана к активной вкладке. Кроме того, история кнопок сохраняется, даже если вы очистите меню истории — по крайней мере, пока вы не закроете вкладку.

person sirch    schedule 26.08.2012

Кажется, что на данный момент решения нет.

person Jan Jongboom    schedule 10.09.2009
comment
Просто для протокола, спустя 2 года это все еще раздражает... Исправления ошибок Webkit немного медленные. - person DarthJDG; 17.06.2011

Вы смотрели на назначение вашего хэша с помощью window.location.hash = newHash вместо замены всего URL-адреса?

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

person MyItchyChin    schedule 31.07.2009
comment
Да replace(url) Заменить текущий документ документом по указанному URL. Отличие от метода assign() в том, что после использования replace() текущая страница не будет сохранена в истории сеанса, то есть пользователь не сможет использовать кнопку «Назад» для перехода к ней. И здесь у меня есть ошибка, потому что это не работает в Webkit. - person Jan Jongboom; 31.07.2009
comment
location.hash создает элементы истории во всех основных браузерах, кроме IE, так что это не сработает :-) - person Jan Jongboom; 31.07.2009