Страница "Перенаправить" без обновления (стиль фотографий Facebook) - PullRequest
13 голосов
/ 29 октября 2010

Я пытаюсь реализовать просмотр контента, как это делается в Facebook, когда пользователь просматривает фотографии. Я думаю, что все знакомы с просмотром этой фотографии, где вы можете нажать «Далее» и «Предыдущее» и сразу же получить следующую или предыдущую фотографию (вы также можете перемещаться с помощью клавиш со стрелками).

Когда вы, например, нажимаете «Далее», вы замечаете, что страница не обновляется - только содержимое. Сначала я подумал, что это делается с помощью простых вызовов ajax, которые обновляют только «контент», в данном случае изображение, описание и комментарии. Но потом я заметил, что также изменился URL на панели инструментов «Местоположение» моего браузера! Я попытался проверить это с помощью Firebug и обнаружил, что при нажатии «Далее» загружается только следующая фотография, и я до сих пор не знаю, откуда загружаются комментарии и метаданные изображения (описание, время, теги, ...) ,

Может кто-нибудь объяснить, как осуществляется этот метод - URL-адрес страницы изменяется без обновления страницы (или даже без «мерцания» страницы, если она обновляется из кэша). Я знаю, как изменить содержимое страницы с помощью ajax, но URL-адрес этой страницы остается неизменным все время. Если я нажму кнопку «обновить», я снова получу первую страницу. Но не на Facebook, так как даже "window.location" изменяется каждый раз без фактического перенаправления.

Еще одна вещь, которую я заметил, это то, что нижняя панель инструментов (приложения, чат, ...) "всегда сверху". Даже если вы измените страницу, эта панель инструментов не обновляется и всегда остается сверху - она ​​даже не мигает, как другие обновленные страницы (либо с веб-сервера, либо из локального кэша). Я предполагаю, что это та же самая техника, что и выше - какая-то «фальшивая» переадресация или что-то еще?

Ответ - pushState

if (window.history.pushState)
    window.history.pushState([object or string], [title], [new link]);

Ты улыбнешься:)

Ответы [ 3 ]

5 голосов
/ 29 октября 2010

Я пытался изменить изображения в Facebook, и вот что я увидел:

В Firefox:

URL страницы не меняется. Только хэш меняется. Этот метод позволяет сканерам индексировать содержимое . Что происходит, это:

  • Пользователь нажимает «далее»
  • JS загружает следующее изображение с тегами, комментариями и т. Д. И заменяет им старый контент.
  • JS меняет хеш, чтобы соответствовать новому изображению

URL выглядят так: http://www.facebook.com/home.php?#!/photo.php?fbid=1550005942528966&set=a.1514725882151300.28042.100000570788121&pid=3829033&id=1000001570788121 (обратите внимание на хеш)

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

В Google Chrome:

Похоже, что в Chrome есть удобный способ изменить URL без обновления страницы . Это делается с помощью window.history.pushState. Читайте об этом здесь .

URL выглядят так: http://www.facebook.com/photo.php?fbid=1613802157224343&set=a.1514725288215100.28042.1000005707388121&pid=426541&id=1000001570788121 (обратите внимание, что здесь нет хэша, но URL все равно меняется вместе с изображениями)

В Богоявление :

Крещение не меняет URL при изменении изображения.

URL-адреса выглядят так: http://www.facebook.com/photo.php?fbid=1441817122377521&set=a.1514725882215100.28042.1000005707848121&pid=3251944&id=1000200570788121 (хеша нет, а URL-адрес остается неизменным при изменении изображения)

(сейчас нет других браузеров для проверки)

2 голосов
/ 03 ноября 2011

Единственный метод, не упомянутый здесь, это метод window.onhashchange () (поддерживается в ie8 + и большинстве других), который они могли бы использовать

0 голосов
/ 29 октября 2010

Вы можете заметить, что URL страницы остаются прежними. Однако изменился хеш страницы (часть после # в URL).

Вам нужно что-то вроде этого: http://code.google.com/p/reallysimplehistory/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...