Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

모바일 브라우저에서 Back 버튼 클릭시 페이지 강제 리로딩 하기

2013-10-16 by 편리

모바일 쇼핑몰 솔루션 작업을 진행하다 보니 새로운 것도 참 많이 알게 된다. swipe 이벤트를 이용해서 이전, 다음 상품을 보여주려고 스크립트를 작성하고 있는데 글쎄 생각지도 못했던 캐시 문제가 발생했다. 왼쪽으로 swipe 하면 화면 전체가 왼쪽으로 애니메이션으로 이동하도록 하는데 기존 페이지의 컨텐츠를 복제해서 레이어를 생성하고 이 레이어가 이동하는 것이다. 그동안 원래 컨텐츠의 모든 엘리먼트는 hidden으로 처리하고 말이다.

그런데 이렇게 했을 때 브라우저에 Back 버튼을 클릭하게 되면 컨텐츠가 표시되지 않고 레이어 이동 애니메이션이 끝난 상태, 즉 모든 엘리먼트가 숨겨진 상태의 페이지가 표시된다. 이건 절대로 원했던 것이 아니다. 그래서 자료를 좀 찾아보니 back-forward cache 라고 해서 페이지가 이동 되면 이전 페이지의 모든 상태를 캐시에 저장하고 Back 버튼을 누르면 이 캐시의 데이터를 가져와서 화면에 표시해준다고 한다. 좋은 기능이긴 한데 작업에는 방해가 되는 요소였다.

그래서 생각한 방법이 back-forward cache 의 데이터를 보여주는 것이라면 이것을 체크해서 강제로 페이지를 리로딩하도록 하는 것이었다. 아래는 그 코드이다.

<script>
$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
        document.location.reload();
    }
});
</script>

pageshow 라는 이벤트가 있는데 이 이벤트가 발생하면 함수를 실행해서 페이지가 리로딩 되는 것이다.

jQuery가 아닌 JavaScript를 사용한 방법은 아래와 같다.

window.onpageshow = function(event) {
    if (event.persisted) {
        document.location.reload();
    }
};

 

참고자료: http://stackoverflow.com/questions/11979156/mobile-safari-back-button

Post navigation

Previous Post:

JavaScript를 이용해 좌우 swipe 방향 알아내기

Next Post:

일본 친구 마키노

2 Commments

  1. Anonymous says:
    2016-01-22 at 14:07

    부모의 창에서 자식의 javascript 를 호출해서 사용하는 방식인대요 설명이… 너무 없네요 .

    window.onpageshow = function(event) {
    if (event.persisted) {
    document.location.reload();
    }
    };

    Reply
    1. 편리 says:
      2016-01-28 at 22:01

      제가 작성한 포스트는 부모, 자식 창에서 사용하는 게 아닙니다.
      원하시는 것은 다른 포스트 등을 검색해 보셔야 할 것 같습니다.

      Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes