2013-03-24 2 views
5

페이스 북에서이 기능을 관찰했습니다. 오른쪽 하단에 채팅 상자가 열리고 다른 페이지, 예를 들어 친구의 프로필 또는 일부 사진 컬렉션 페이지로 이동하면 페이스 북의 채팅 박스는 다시로드되지 않고 그대로 남아 있습니다 (백그라운드 페이지 상단의 별도 레이어에있는 것처럼).페이 스북 chatbox는 페이지간에 다시로드되지 않습니다

당연히 페이 스북 자체가 페이지를 다시로드하지 않는다고 생각합니다. history.pushstate 및 관련 기능을 사용하여 비동기 적으로 내용을로드하고 URL을 동적으로 변경합니다. (방화범이 그것을 확인했습니다. 친구의 이름으로 친구의 프로필 페이지로 이동하면 사실은 GET 요청이 해고됩니다. 그래서 정확하게 페이지 로딩이 없기 때문에, 채팅 박스는 그대로 유휴 상태가 될 수 있습니다.

그러나 pushstate은 버전 10 이전의 IE에서 지원되지 않습니다. 여전히 IE9에서도 잘 작동합니다. 아무도 그들이 어떻게 그것을하고 있는지 말해 줄 수 있습니까? 그들은 history API를 전혀 사용하고 있습니까? 아니면 다른 것이 있습니까?

답변

7

간단히 대답하면 큰 질문입니다. 나는 페이스 북에 대해 잘 모르겠지만, 이것은 당신을 도움이 될 것입니다 - History.js

History.js 정상적으로 모든 브라우저에서 HTML5 역사/국가 API를 (pushState, replaceState, onPopState)를 지원합니다. 데이터, 제목에 대한 지속적인 지원을 포함하여 State를 대체합니다. jQuery, MooTools 및 Prototype을 지원합니다. HTML5 브라우저의 경우 이것은 해시를 더 이상 사용하지 않고 URL을 직접 수정할 수 있음을 의미합니다. HTML4 브라우저의 경우 이전의 onhashchange 기능으로 되돌아갑니다.

+0

그래,이게 올거 란걸 알아. 그러나 문제는 HTML4 브라우저에 대해서는 onHashChange 함수에 의존한다는 것입니다. 그러나 IE89의 경우 해시가 변경되었을뿐만 아니라 경로도 변경되는 여러 사례가 있음을 분명히 알게되었습니다.이 경우에도 IE9는 페이지를 다시로드하지 않으므로 채팅 상자가 그대로 유지됩니다. 단지 동적으로 URL을 변경합니다 .. – SexyBeast

+0

좋아요, 알았어요, 모든 새로운 경로가 조각 나고 다른 것들이 해쉬 기호 다음에 추가됩니다. 이는 모두 해시의 일부임을 의미합니다. 권리? – SexyBeast

+0

맞아요, 나는 그것을 테스트하지 않았지만, 이런 것처럼 보입니다. 가장 좋은 예는 해시 시스템을 포함하는 모바일 버전의 Facebook (https://m.facebook.com/)입니다. –