먼저 필요 : 표시 할 것
url = '/api/html?profile=12345';
$.ajax({
url: url,
dataType: 'html'
}).always(function(response, status) {
if ('success' !== status) {
alert('Error loading page...');
return;
}
//store state for the back and refresh button handler
if (window.history) {
history.replaceState({
reloadUrl: location.href
}, '', location.href);
history.pushState({
reloadHtml: response
}, '', url);
} //if(window.history)
//render new page into current window
document.open('text/html','replace');
document.write(response);
document.close();
});
가를 을 다시하려면 앞으로 및 이 버튼이 작동 새로 고침, 당신은 당신의 자신의 핸들러를 추가해야합니다 또는 저장된 상태에 따라 페이지를 다시로드하십시오.
var allowPopState = false; //fixes popstate in Safari that fires it on every page load
$(function() { setTimeout('allowPopState = true;', 1); });
$(window).on('popstate', function(event) {
if (!history.state) { return; }
if (!allowPopState && document.readyState === 'complete') {
event.preventDefault();
event.stopImmediatePropagation();
return;
}
if (history.state.reloadHtml) {
document.open('text/html','replace');
document.write(history.state.reloadHtml);
document.close();
} else if (history.state.reloadUrl) {
if (history.state.reloadUrl === location.href) {
location.reload();
} else {
location.replace(history.state.reloadUrl);
}
}
});
이렇게하면 애니메이션이 완전히 유지되지는 않지만 최소화됩니다. 브라우저가 새 페이지를로드하고 렌더링하는 시간이며 페이지가로드되는 동안 애니메이션이 계속 진행됩니다.
더 나은 결과를 얻으려면 다음 페이지의 모든 리소스를 캐싱하거나 다음 페이지에서 지연로드를 사용해야합니다.
알려진 버그 : 데스크톱 Firefox에서는 페이지 확대/축소 (CTRL +/- 또는 CTRL + 스크롤)가 재설정됩니다. 예 : 현재 페이지를 200 %로 확대하면 다음 페이지가 100 % 확대/축소로 표시됩니다.
이전 버전을 지우고 탭에서 새 내용을로드하려는 브라우저입니다. 자바 스크립트 관심사에서 보인다. – Sharky
브라우저로 인해 발생합니다. 페이지가 서버에서로드되는 동안 애니메이션이 적용되지만 구문 분석을 시작하면 애니메이션이 중지됩니다. 큰 페이지라면 주목할만한 것입니다. –