Firefox 기록으로 돌아 가면 JavaScript가 실행되지 않습니다.
Firefox에서 뒤로 버튼을 사용하여 이전에 방문한 페이지로 이동하면 해당 페이지의 펼쳐가 다시 실행되지 않습니다 .
거기에 어떤 수정 / 해결 방법 페이지를 두 번째로 볼 때 펼쳐야 다시 실행해야 하는가?
Google 크롬과 Internet Explorer에서 동일한 페이지를 테스트하지만 한대로 작동합니다.
다음은 문제를 테스트하는 데 파일과 단계입니다.
(0.html로 이동, 클릭하여 1.html로 이동, 뒤로 버튼)
0.html
<html><body>
<script>
window.onload = function() { alert('window.onload alert'); };
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
1.html
<html><body>
<p>Go BACK!</p>
</body></html>
window.onunload 호출에서 할 빈 함수를 설정합니다.
window.onunload = function(){};
예 :
<html><body>
<script type="text/javascript">
window.onload = function() { alert('window.onload alert'); };
window.onunload = function(){};
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
출처 : http://www.firefoxanswer.com/firefox/672-firefoxanswer.html (보관 버전)
Firefox에서 뒤로 버튼을 사용하여 이전에 방문한 페이지로 이동하면
나는하고 좋은 일입니다.
Firefox (및 Safari)에서 링크를 다음 페이지로 이동하기 위해 페이지가 즉시 파괴되지 않습니다. 페이지를 그대로 유지하고보기에서 숨길뿐입니다. 뒤로 버튼을 저장 문서를 다시로드 할 필요없이 이전 페이지를 다시 볼 수 있습니다. 이것은 훨씬 더 빠르 사용자에게 더 부드러운 뒤로 / 앞으로 페이지 전환이 가능합니다.
이 기능을 bfcache 라고합니다 .
사용자가 이전에로드하고 사용하는 동안 페이지에 추가 한 모든 콘텐츠는 그대로 유지됩니다. 페이지 요소에 연결 한 모든 이벤트 처리기는 계속 연결됩니다. 설정 한 시간 제한 / 간격은 계속 활성화됩니다. 따라서 당신이 숨겨졌다가 다시 나타났습니다. 펼쳐지는 onload
코드를 호출 하거나 인라인하는 무효 다시 것 입니다. 함수에서 수행 한 바인딩 및 콘텐츠 생성은 해당 콘텐츠에 대해 두 번째로 실행되어 해당하는 비참한 결과가 발생하기 때문입니다. (예 :
document.write
인라인 펼쳐지는 페이지가 완전히 파괴됩니다.)
에 쓰기 window.onunload
가 영향을 미치는 이유 는 bfcache를 구현하는 브라우저가-언제 폐기 될지 알가있는 페이지와의 교환 될지 알가있는 페이지와의 교환 이 가능하도록 -언제 발생 onunload
하는지 알기 위해 관심이 있을지 선언하는 페이지 는 bfcache가됩니다. 해당 페이지는 bfcache에서 가져 오는 대신 페이지로 돌아갈 때 새로로드됩니다.
따라서 설정 window.onunload= function() {};
하면 실제로 수행하는 작업은 의도적으로 bfcache를 깨는 것입니다. 이로 인해 페이지 탐색 속도가 최상후의 수단으로 사용하지 않습니다.
bfcache를 엉망으로 만들지 않고 사용자가 언제 페이지를 떠나거나 다시 돌아 왔는지 알고한다면, 대신 onpageshow
및 onpagehide
이벤트를 트랩 할 수 있습니다 .
window.onload=window.onpageshow= function() {
alert('Hello!');
};
이벤트 의 persisted
속성을 확인할 수 있습니다 pageshow
. 초기 페이지로드시 false로 설정됩니다. 페이지가 캐시에서로드되면 true로 설정됩니다.
window.onpageshow = function(event) {
if (event.persisted) {
alert("From bfcache");
}
};
어떤 이유로 jQuery에는 이벤트에이 속성이 없습니다. 그래도 원래 이벤트에서 찾을 수 있습니다.
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
alert("From bfcache");
}
});
아무것도하지 않는 "onunload"이벤트에 연결 :
<html><body>
<script type="text/javascript">
window.onload = function() { alert('window.onload alert'); };
window.onunload = function(){};
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
내가 아는 한 Firefox는 onLoad
다시 이벤트를 발생시키지 않습니다 .
대신 여기이 링크를 기반으로 onFocus를 트리거해야합니다 .
사용자가 브라우저 기록을 사용하여 페이지로 다시 이동할 때 페이지가 JavaScript를 실행하도록하는 간단한 방법은 OnPopState 이벤트입니다. 이를 사용하여 홈페이지 ( https://fynydd.com ) 에서 비디오를 일시 중지하고 재생합니다 .
window.onpopstate = function() {
// Do stuff here...
};
ajax 작업과 같은 경우 URL 변경 리스너를 사용할 수 있습니다.
$(window).on('hashchange', function() {
....
});
'ProgramingTip' 카테고리의 다른 글
virtualbox 원시 모드는 Hyper-V Windows 10에서 사용할 수 없습니다. (0) | 2020.10.18 |
---|---|
모든 좋은 PHP 개발자가 답할 수있는 질문 (0) | 2020.10.18 |
gitlab 개인 저장소에서 npm 모듈 설치 (0) | 2020.10.18 |
UIViewController의 뷰를 서브 뷰로 추가하는 방법 (0) | 2020.10.18 |
CSS3 box-shadow : 인세 트는 한쪽 또는 양면 만 할 수 있습니까? (0) | 2020.10.18 |