Как facebook переписать URL-адрес страницы в адресной строке браузера?



перейти к http://www.facebook.com/facebook?v=wall, затем перейдите на вкладку Информация. Содержимое будет загружено, и адресная строка теперь становится http://www.facebook.com/facebook?v=info но веб-страница не перезагрузилась.



сначала я думаю, что это Ajax, но мой вопрос в том, как вы меняете адресную строку без перезагрузки? Я знаю, что могу изменить якорь (#wall) с помощью JS, но querystring (?в=стены), как?

684   4  

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

    Ничего не найдено.