Как facebook переписать URL-адрес страницы в адресной строке браузера?
перейти к http://www.facebook.com/facebook?v=wall, затем перейдите на вкладку Информация. Содержимое будет загружено, и адресная строка теперь становится http://www.facebook.com/facebook?v=info но веб-страница не перезагрузилась.
сначала я думаю, что это Ajax, но мой вопрос в том, как вы меняете адресную строку без перезагрузки? Я знаю, что могу изменить якорь (#wall) с помощью JS, но querystring (?в=стены), как?
4 ответов:
он использует новый HTML5
history.pushState()функция, позволяющая странице маскироваться под другой URL-адрес, из которого она была первоначально извлечена.это, кажется, только поддерживается WebKit на данный момент, поэтому остальные из нас видят
?v=wall#!/facebook?v=infoвместо?v=info.эта функция позволяет динамически загружаемых страниц, чтобы быть правильно закладках, обменять и т. д. между JS-вспомогательная и non-Яш-агентов поддержки пользователей. Потому что если вы как JS пользователь связал кого-то с
?v=wall#!/facebook?v=infoи их браузер не поддерживает JS и XMLHttpRequest, страница не будет работать для них. Элемент#!также используется в качестве подсказки для поисковых систем, чтобы загрузить версию без AJAX.
@Snoob-я был бы признателен, если бы вы приняли @bobince ответ вместо этого, он был на правильном пути о специфике сначала здесь. Поскольку я не могу удалить это, пока это не я буду обновлять его как можно правильнее.
на данный момент это WebKit (Chrome, Safari и др.) конкретная вещь, которую вы видите (точнее, не видите), как @bobince в другое браузеры вы можете увидеть реальные URL в строке:
http://www.facebook.com/facebook?v=wall#!/facebook?v=info\где Chrome просто показывает:
http://www.facebook.com/facebook?v=infoэто имеет некоторый смысл,учитывая это, как вы делаете AJAX контента для обхода с поисковой системой Google, поэтому их браузер также распознает, откуда поступает контент.
поправка на специфику: браузеры Webkit показывают сокращенный URL facebook хочет использовать функции истории HTML 5 вы код можно посмотреть здесь (взгляните на
HistoryManager) в данном случае конкретно они используют.replaceState()чтобы заменить URL, на который вы пошли, на прямой доступный.Примечание: этот ответ может быть недействительным позже (конкретный бит WebKit), так как другие браузеры поддерживают функции HTML5 все больше и больше это может быстро устареть.
для разработчиков MooTools я рекомендую проверить cpojer's mootools-history плагин, который обеспечивает поддержку собственного API истории, когда он доступен, с резервным вариантом для хэшей.
У меня нет Facebook, поэтому я не могу проверить. Но я на 95% уверен, что это должен быть запрос на полную страницу, панель местоположения недоступна для записи, потому что это будет очень полезная функция для absure для фишинговых сайтов (вместо http://fakeonlinebank.com его переписать на http://yourtrustybank). Вероятно, это просто так быстро, что ваш браузер, похоже, загружает только эту часть?
но мне любопытно увидеть, если кто-то поправит меня в этом, потому что это будет означать у них есть ответ, который вы хотите услышать;)
Comments