지금 귀하의 설명을 이해할 것으로 생각됩니다.
귀하의 사이트에서 /page1.html을 방문하면 다운로드 한 HTML에 기본 콘텐츠 + 헤더 + 사이드 바가 있습니다. /page2.html을 방문하는 링크를 클릭하면 AJAX가 페이지를로드하고 다운로드 한 HTML에 주 콘텐츠 만 있습니다. 나는 귀하의 사이트를 떠날 후 백 버튼으로 돌아올 때
그래서,이 시점에서 캐시,
이제 전체 /page1.html 및 부분 /page2.html을 포함, 브라우저/페이지 2를 잡고 .html 캐시에서. 그러나 그것은 부분적인 페이지 일 뿐이며 사이트는 "고장"니다.
XMLHttpRequest를 사용하여 요청한 경우에만 브라우저가 부분 콘텐츠를 가져 오게하는 것이 가장 이상적입니다. 또한 부분 및 전체 페이지를 모두 캐시 할 수 있으면 좋을 것입니다.
pjax은 AJAX 요청의 URL 쿼리에 _pjax=true
매개 변수를 추가하여이 문제를 해결합니다. 나는 이것이 대부분의 시나리오에서 잘 작동해야한다고 생각한다.
pushState()
에 전달하는 URL에이 매개 변수를 추가하지 마십시오.
대체 방법은 전체 페이지를 다운로드 한 다음 AJAX를 사용할 때 #main-view
을 추출하는 것입니다.
물론 PJAX로 전환하면 다른 사람의 문제를 만들 수 있습니다 (fragment
옵션을 사용해야 함).
pushState()를 처리하는 다른 JS 라이브러리는 내 HTMLDecor 프로젝트입니다. HTMLDecor를 사용하면 페이지에 기본 콘텐츠 + <link>
만 포함되어 머리글/바닥 글/세로 막대가 포함 된 다른 (아마도 공유되는) HTML 페이지에 연결됩니다. HTMLDecor는 이것을 브라우저 내에서 페이지에 추가합니다. 사용자가 링크를 클릭하여 다른 페이지를 탐색하면 HTMLDecor는 AJAX 및 pushState를 사용하므로 구성이 필요하지 않습니다. 물론 브라우저가 pushState를 지원하지 않으면 일반적인 링크 탐색이 발생합니다.
domready에서 고유 ID를 생성하고 문서 수명 기간마다 동일한 고유 ID를 사용 했습니까? –
사용자가 페이지를 떠날 때 감지하는 방법이 있다고 생각하지 않습니다. –
빅터,'window.onbeforeunload'가 있습니다 만, 나는 당신이 팝업 메시지로 사용자를 효과적으로 막을 수 있다고 들었습니다. 캐시를 지우는 방법을 알았다면 사용자가 떠나기 전에 시간 안에 작동하는지 확인할 수있었습니다. –