Как я могу изменить расположение окна без перезагрузки и взлома?

Сначала я думал, что хеш-хак обязателен, однако, судя по последним обновлениям на фейсбуке, я думаю иначе.

Оригинальный хеш-хак (я не уверен, что это правильный термин) заключается в том, что, изменив location.hash, можно сохранить состояние в URL-адресе без обновления страницы. Это широко используется приложениями Google и Facebook, а в последнее время и #NewTwitter. Однако сегодня я заметил, что у Facebook больше нет этого «#», если вы используете «современный» браузер, такой как Chrome или Firefox. Я дважды проверил, что они не перезагружаются, используя инструменты разработчика и firebug соответственно.

С минимальным поиском в stackoverflow наиболее близким к решению является использование Flash, однако я отключил Flash, и facebook.com по-прежнему работает как шарм. Судя по охвату chrome 8 dev и firefox 4 beta, мне интересно, что это может быть связано с API-интерфейсами эпохи HTML5, но код в Facebook не в моих силах отладить, чтобы узнать, что они сделали.

Поскольку это первый вопрос, который я здесь задаю, мне интересно, возможно, кто-то из вас уже решил эту проблему.

Спасибо, парни.

P.S. Не работает в IE8, не проверял бета-версию IE9.


person itsnotvalid    schedule 22.10.2010    source источник
comment
Что не работает в IE8? :) На это распространяется руководство Google по сканированию AJAX. У них есть витрина по адресу gwt.google.com/samples/Showcase/Showcase.html который может быть здесь полезен.   -  person bzlm    schedule 22.10.2010
comment
Я не знаю, является ли это ответом, но есть хранилище данных на стороне клиента в HTML5. Возможно, это используется. В Safari (и я предполагаю, что в Chrome) есть раздел «Хранилище» инструментов разработчика. Возможно, это даст некоторые подсказки.   -  person user113716    schedule 22.10.2010


Ответы (1)


Facebook использует API истории в HTML5. Из этой записи в блоге вы можете увидеть, как это работает. В основном они делают вызовы, подобные приведенному ниже, чтобы изменить URL-адрес без перезагрузки страницы.

window.history.pushState("object or string", "Title", "/new-url");

Вот рабочая спецификация HTML5 по этому поводу: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#the-location-interface

К сожалению, IE9 не поддерживает этот API. Новые версии Chrome и FF имеют полную поддержку.

person Nathan Totten    schedule 22.10.2010
comment
Спасибо за ответ, и я думаю, что мне нужно копнуть глубже в спецификации разработчиков. -› dev.w3.org/html5/spec/history.html - person itsnotvalid; 25.10.2010
comment
Я только что нашел этот плагин jquery, который вы можете проверить. Это кажется довольно хорошим для обработки этого, плюс он ухудшается для работы с браузерами, которые не поддерживают HTML5. asual.com/jquery/address - person Nathan Totten; 25.10.2010
comment
А что насчет ie9. Как это сделать в ie9 - person Abhishek Gupta; 25.06.2012