Прокрутка страницы с помощью location.hash в Safari - PullRequest
4 голосов
/ 14 февраля 2009

У меня есть страница форума, которая отображает древовидную структуру сообщений под текущим выбранным сообщением. Когда вы нажимаете на сообщение в дереве, новое тело сообщения загружается в div в верхней части страницы с помощью AJAX, а затем запускается следующий код:

window.location.hash = "page_top";

Конечно, "page_top" - это якорный элемент в верхней части страницы, поэтому вновь загруженное тело сообщения прокручивается.

Это прекрасно работает во всех браузерах, кроме Safari. В Safari (протестировано на ПК и iPhone) он работает только при первой установке location.hash . Если вы установите его снова, страница не будет прокручиваться.

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

Почему Safari не нравится, и я могу что-нибудь сделать, чтобы это исправить?

Edit:

Я предполагаю, что это связано с ошибкой, которую вы можете найти в Google по поводу location.hash и Safari. Похоже, что в Safari раньше была ошибка, когда, если вы дважды указали одно и то же значение для хэша, это привело бы к перезагрузке страницы. Я предполагаю, что когда они исправили эту ошибку, они исправили ее слишком тщательно и перестали делать что-либо, когда вы снова установите хэш на то же значение.

http://www.howtocreate.co.uk/safari/locationHashBug.html

Ответы [ 4 ]

3 голосов
/ 14 февраля 2009

Вы можете сбросить его первым:

window.location.hash = "";
window.location.hash = "page_top";
2 голосов
/ 26 августа 2010

Мне нужно было добавить:

<div><a name="page_top"></a></div>
<div><a name="page_topnot"></a></div>

Использование «имени» вместо «href». Прекрасно работает!

1 голос
/ 16 февраля 2009

Отвечая на мой собственный вопрос. Гамбо был на правильном пути, но не совсем там.

Safari не нравится, когда location.hash задается пустое значение. Вместо этого вам нужно установить реальное значение привязки.

Итак, вверху страницы у меня теперь есть:

<div><a href="page_top"></a></div>
<div><a href="page_topnot"></a></div>

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

Затем, чтобы перейти к началу страницы, я должен сделать:

window.location.hash = "page_topnot";
window.location.hash = "page_top";

После этого Safari будет прокручивать страницу вверх каждый раз.

0 голосов
/ 31 августа 2009

У меня была та же проблема, что и у вас, и это решение работало - единственное, что я заметил, было то, что в IE я мог слышать два щелчка - поэтому я сделал ваш вариант и просто поставил один якорь, и это сработало ( т.е. вызов дважды, первый раз несуществующий якорь, второй раз реальный)

Наверху, мой якорь:

(tag a)name="top" id="top"(end of tag a)

В javascript, два вызова:

window.location.hash ="topnot";

window.location.hash ="top";

Спасибо за вашу помощь!

...