문제

Gmail은 메일을 클릭하면 페이지를 구별하기 위해 #을 사용합니다 (+ ajax 조치).http://mail.google.com/mail/#inbox/1238e709e37a1394

나는 찾았다 :검색 대신 Google을 사용합니까? URL에서. 왜요?

FF 또는 Chrome에서는 해당 URL간에 새로 고침없이 앞뒤로 사용할 수 있습니다.http://x.com/mypage.aspx#1 http://x.com/mypage.aspx#2 http://x.com/mypage.aspx#3

그러나 즉, 페이지 새로 고침과 # 이후의 # 이후에 매개 변수를 계산하지 않습니다.

Gmail은 어떻게 마술을 일으키는가?

도움이 되었습니까?

해결책 2

이것이 제가 찾고 있던 것입니다.http://nix.lv/history/demo.html#3

찾았습니다 :IE6 역사상 앵커를 저장하십시오

다른 팁

나는이 문제에 직면하고 해결했기 때문에 이것에 대한 답을 줄 수 있습니다.

여기서 먼저 이해할 몇 가지 개념이 있습니다.

  1. JavaScript는 브라우저 기록을 직접 변경할 수 없습니다.
  2. 페이지에서 iframe의 기본 URL이 변경 될 때마다 기록이 업데이트됩니다. (그러나 이것은 브라우저가 다른 단점이 있습니다).
  3. URL에는 "해시"부분이 있습니다 : 예 : URL. http://mail.google.com/mail#inbox, #inbox 해시 부분입니다. "해시"라고 부릅니다. 그래서 http://mail.google.com/mail "기본 URL"이 될 것입니다.

Gmail의 기록 추적은 주로 "해시"를 기반으로 한 트릭을 사용하여 수행됩니다.

따라서 몇 가지 개념 :

  1. 주소 표시 줄의 URL이 변경되면 히스토리가 업데이트됩니다 (이전 URL은 기록에 들어갑니다)
  2. 기본 URL이 변경되면 페이지가 다시로드됩니다.
  3. 기본 URL이 변경되지 않고 URL의 해시 부분이 변경되면 페이지가 다시로드되지 않습니다.

그래서, 당신이 갈 때 http://mail.google.com/mail#inbox 에게 http://mail.google.com/mail#sent, 그 페이지 상쾌하지 않습니다.

이제 해시가 변경되었을 때 Gmail이 이벤트 알림을 받으면 Gmail은 이에 따라 조치를 취할 수 있습니다. 불행히도, 역사 행동을 포착하는 데 도움이되는 DOM 이벤트는 없습니다. 대신 (문제를 극복하는 방법을 보여주는 부분), 해시의 변경 사항을 확인하는 무한 루프를 실행합니다. 변경 사항이 관찰되면 브라우저의 "뒤로"또는 "전진"버튼을 클릭하면됩니다.

이것을 해결할 때 나는 편리한 도구를 만들었습니다. URL 파서. 해시에서 인코딩 된 매개 변수뿐만 아니라 URL에서 매개 변수를 구문 분석 할 수 있습니다. 데모를 줘!

건배!


IE 의이 문제에 대해 : 나는이 '해시'기반 솔루션이 IE (가난한 오래된 Linux 개발자)에서 작동하지 않는다는 것을 몰랐습니다.

그러나 IE의 경우 숨겨진 iframe을 사용하고 "URL에 영향을 미치는 히스토리"속성을 사용하여 기록을 구현할 수 있습니다. 나는이 진술에 세부 사항이 없다는 것을 알고 있지만, IE에 대한 경험 부족에서 비롯됩니다.

나는이 솔루션을 시도하고 후속 조치를 취할 것이다 :)

인터넷에서 Iframes/Location Hash를 사용하여 적절한 역사 구현을하는 많은 링크를 찾았습니다. 다양한 브라우저에서 iframe 인터페이스의 차이점을 파헤칠 인내가 없었습니다.

나는 내가 선호한다고 생각한다 jQuery 플러그인. Yui는 역사 관리자도 있습니다.

건배!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top