반응형
■ [jQuery] 해쉬체인지를 이용한 AJAX에서 뒤로가기(back) 기능 구현
AJAX 게시판 기능 구현중 리스트(List)영역에서 뷰(View) 영역으로 이동 후 뒤로가기 버튼을 눌렀을때 다시 게시판 리스트 페이지로 이동하지 못하는 문제가 발생하였는데 해당 포스팅(http://www.erzsamatory.net/29) 내용을 참고하여 해결할 수 있었다.
이 포스팅은 참고한 포스팅에서 필자에게 필요한 부분만 뽑아서 다시 정리한 것이다.
hashchange_wicked.php |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>해쉬체인지</title> <script type="text/JavaScript" src="http://code.jquery.com/jquery-1.7.min.js"></script> <script type="text/JavaScript"> jQuery(window).on('hashchange', function () { goToFromHash(); }); jQuery(window).on('load', function () { goToFromHash('onload'); }); function goToFromHash(a) { // 해쉬태그에서 맨 앞의 #을 제거한다. var hashtag = location.hash.substring(1, location.hash.length); var frame = ""; if(hashtag == 'home') { frame = "데이터가 존재하지 않습니다."; } else if (hashtag == 'magic') { frame = "<iframe width=\"100%\" height=\"315\" src=\"http://wickedmagic.tistory.com/\"></iframe>"; } else if (hashtag == 'footmark') { frame = "<iframe width=\"100%\" height=\"315\" src=\"http://wickedmiso.tistory.com//\"></iframe>"; } else if (hashtag == '#swing') { frame = "<iframe width=\"100%\" height=\"315\" src=\"https://www.youtube.com/channel/UCuGvJ5gI_wk406gmWIVU4lQ/\"></iframe>"; } else if (hashtag == '#book') { frame = "<iframe width=\"100%\" height=\"315\" src=\"http://wickedbook.tistory.com//\"></iframe>"; } else if (hashtag == '#log') { frame = "<iframe width=\"100%\" height=\"315\" src=\"http://blog.naver.com/yinglong200/\"></iframe>"; } else if (!hashtag && a != 'onload') { // 해시가 없는 페이지로 뒤로가기를 하였을 때를 대처하기 위한 스크립트입니다. location.reload(); } jQuery('#content').html(frame); } </script> </head> <body> <div style="padding:10px; font-size:12px;"> <a href="#home">| 홈 </a> <a href="#magic">| 현대마법의 공방 </a> <a href="#footmark">| 발길향하는 공간 </a> <a href="#swing">| 스윙튜브</a> <a href="#book">| 반쪽달이 떠오르는 서가 </a> <a href="#log">| 기록의 지평선 |</a> </div> <div style="height:30px;"></div> <div id="content" style="border:3px solid #efefef;"></div> </body> </html> |
출력결과 |
위와같이 해결 할 수 있었다.
※ 출처 : 해시체인지 이벤트를 활용하여 페이지 이동을 최대한 줄이는 방법(http://www.erzsamatory.net/29)
hashchange.php |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>해쉬체인지</title> <script type="text/JavaScript" src="http://code.jquery.com/jquery-1.7.min.js"></script> <script type="text/JavaScript"> // 해쉬가 변경되었을 때 실행된다. $(window).on('hashchange', function () { goToFromHash(); }); // 윈도우가 모드 로드되었을 때 실행한다. // goToFromHash() 함수에 매개변수를 넣음으로써 윈도우 로드 후 가장 처음 실행되는 함수임을 알린다. // 매개변수를 전달함으로써 해쉬가 변경되지 않는 상황에 대처할 수 있다. $(window).on('load', function () { goToFromHash('onload'); }); // 해쉬를 분석하여 적당한 페이지로 이동할 때 사용하는 함수 function goToFromHash(a) { // 해쉬태그에서 맨 앞의 #을 제거하고 공백을 %20으로 치환한다. // 해쉬태그를 쉽게 분석하기 위한 작업한다. var hashtag = location.hash.substring(1, location.hash.length).replace(/ /gi, '%20'); // 태그 페이지의 이중 주소 정규표현식 var tag = /^tag\/([\s|0-9|a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝|\-|\_]+)$/i; // 글 목록 페이지의 이중 주소 정규표현식 var archive = /^archive\/([0-9]+)$/i; var category = /^category\/([\s|0-9|a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝|\%|\/]+)$/i; // 검색 페이지의 이중 주소 정규표현식 var s = /^search\/([\s|0-9|a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝|\%|\/|\-|\_|\[|\]]+)$/i; // 스크립트에서 정한 해시를 입력한 경우에만 해시체인지 함수를 실행하도록 한다. (보안) // 자바스크립트에서 정규표현식을 어떻게 적용하는지 주의깊게 살펴본다. if( hashtag == 'guestbook' || hashtag == 'tag' || hashtag == 'location' || hashtag == 'keylog' || tag.test(hashtag) || archive.test(hashtag) || s.test(hashtag) ) { // ID가 content인 블럭의 내용을 해당 해시에 맞는 내용으로 바꿉니다. (실시간) jQuery('#content').load('http://www.erzsamatory.net/'+hashtag+' #content'); // 내용이 변경되었으니 스크롤바를 최상단으로 옮깁니다. jQuery(window).scrollTop(0); } else if (category.test(hashtag) || hashtag == 'category') { // 글 목록 페이지를 이동시킬 때 실행되는 작업입니다. 이중 주소를 처리합니다. jQuery('#content').load('http://www.erzsamatory.net/'+hashtag+' #content'); jQuery(window).scrollTop(0); } else if (hashtag == 'home') { // 해시가 home일 때 실행한다. jQuery('#content').load('http://www.erzsamatory.net/ #content'); jQuery(window).scrollTop(0); } else if (!hashtag && a != 'onload') { // 매개변수로 'onload'가 입력되지 않았을 때, // 해시가 비어있을 때 새로고침합니다. // 해시가 없는 페이지로 뒤로가기를 하였을 때를 대처하기 위한 스크립트입니다. location.reload(); } } </script> </head> <body> <div style="padding:10px; font-size:12px;"> <a href="#home">홈</a> <a href="#tag">태그</a> <a href="#tag/웹프로그래밍">|웹프로그래밍 태그|</a> <a href="#category">글 목록</a> <a href="#category/컴퓨터 및 첨단기술">|컴퓨터 및 첨단기술|</a> <a href="#guestbook">방명록</a> </div> <div style="height:30px;"></div> <div id="content" style="border:3px solid #efefef;"></div> </body> </html> |
출력결과 |
반응형
'jQuery' 카테고리의 다른 글
[jQuery] DIV로 레이어 팝업창 만들기 (0) | 2015.07.25 |
---|---|
[jQuery] 순차적 선택 (0) | 2015.06.11 |
[jQuery] append vs html 비교 (0) | 2015.05.22 |
[jQuery] jQuery Ajax 부가 메서드 (0) | 2015.05.10 |
[jQuery] jQuery Ajax의 기초 (0) | 2015.05.10 |