Как мога да променя местоположението на прозореца без презареждане и # хак?

Първоначално си помислих, че хеш хакът е изискване, но съдейки по последните актуализации от facebook, мисля друго.

Оригиналният хеш хак (не съм сигурен дали това е правилният термин) е, че чрез промяна на 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