2009-07-31 1 views
6

На данный момент у нас есть фотогалерея, которая использует hashvalues, чтобы определить, какое изображение в настоящее время отображается пользователю, и поддерживать отправку страницы другу и тому подобное. Что-то вроде: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. Я нашел много образцов, как создавать элементы истории при использовании хэша для навигации, как это, но я хочу сделать это по-другому. Любая подсказка?

ответ

3

Это работает, как ожидается, в настоящее время:

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

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

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

И история очереди кнопок назад/вперед привязана к активной вкладке. Кроме того, история кнопок остается даже при очистке меню истории - по крайней мере, до закрытия вкладки.

0

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

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

+0

Да «заменить (url) \t Заменить текущий документ на предоставленный URL. Отличие от метода assign() заключается в том, что после использования replace() текущая страница не будет сохранена в истории сеансов, что означает пользователь не сможет использовать кнопку «Назад», чтобы перейти к ней ». И там у меня есть ошибка, потому что это не работает в Webkit. –

+0

Я объясню свой ответ – MyItchyChin

+1

location.hash создает элементы истории во всем главном браузере, кроме IE, так что это не сработает :-) –

3

Там, кажется, нет никакого решения в этой точке.

+0

Просто для записи это еще одна неприятная проблема спустя 2 года ... Webkit Исправлены некоторые ошибки. – DarthJDG

Смежные вопросы