홈으로 홈으로 | 무료회원가입 | 아이디/비번찾기 | 즐겨찾기
추천음악방송메인홈1대1상담음악방송청취
운.영.자.1대1.상담

온라이브음악방송
온라이브스토어(앱다운로드)
아리랑가요(무료음악채널)
뽕짝아가씨(무료음악채널)
okTrot(무료음악채널)
전통가요(무료음악채널)

환상의뽕짝파티 무료음악
명작트로트메들리 무료음악
트로트메들리관광 무료음악
동영상노래방
가사검색

POP Player
신나는 고스톱
컴퓨터 오목
작은 음악다방
최신 인기가요

보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
[JavaScript] 뒤로가기 히스토리가 없는 것을 어떻게 알 수 있을까?
3년 전
모바일 웹앱을 개발하는 과정에서, 메인 parent 페이지을 제외하고 모든 child 페이지에서 최상단에는 항상 ← 뒤로가기 버튼이 존재하게 디자인이 되었다.

보통은 메인 parent 페이지를 통해 child 페이지로 이동하지만, 때로는 외부에서 child 페이지에 바로 접근하는 경우도 생겼다. 이런 경우 뒤로가기 버튼에 history.back() 을 넣으면 아무런 동작을 하지 않게 되는 문제가 드러났다. 어떻게 해야할까?



window.history
제일 먼저 생각난 방법은 history.length를 사용하는 방법이었다. 결론부터 말하면 사용할 수 없는 방법이었다.

history.length 에는 각 링크 이동에 따른 히스토리가 몇 개인지가 기록되어 있는데, 현재 child 페이지에 바로 접근했을 때는 history.length 가 0 또는 1의 값을 갖기 때문에 마치 판별할 수 있을 것 같다. 하지만 child 페이지에서 다른 child 페이지로 한번이라도 링크 이동을 할 경우 history.length 가 증가하게 되고 이렇게 증가된 length는 다시 뒤로가기를 해서 처음 child 페이지로 돌아가도 히스토리 자체는 남아있기 때문에 length 가 줄어들지 않는다.
이런 상태에서는 전체 히스토리 길이만 알 수 있을 뿐 전체 히스토리 상에서 현재 위치(?)를 알 수 없기 때문에 더이상 뒤로가기를 할 수 있는지 없는지 history.length 가 하나라도 더 증가되면 알 길이 없다.

따라서 history.length는 처음 진입한 child 페이지에서 더이상 뒤로가기 히스토리가 없다는 것을 판별할 수 있는 방법이 아니다.



document.referrer
방법이 없을까 계속 찾던 중 document.referrer 가 해답이 될 수 있음을 발견했다.
document.referrer 는 링크를 통해 이동했을 때 어떤 페이지의 링크를 통해 왔는지 레퍼러가 기록되는 공간이다. 따라서 바로 타이핑해서 직접 특정 페이지로 들어갈 경우 이 referrer 가 존재하지 않게 되므로 그게 첫 페이지임을 알 수 있다.

아래의 코드를 살펴보자.
  
//뒤로갈 히스토리가 있으면,
if ( document.referrer ) {
        // 뒤로가기
        history.back();
}

// 히스토리가 없으면,
else {
        // 메인 페이지로
        location.href = "http://m.naver.com";
}


이렇게 할 경우, 효과적으로 뒤로 가기할 곳이 없을 때 메인 페이지로 이동할 수 있게 된다.
깔끔하게 한 줄짜리 코드로 변환하면 아래와 같이 바꿀 수 있다.

document.referrer ? history.back() : location.href="http://m.naver.com";


그런데 만약 타사 페이지에서 링크로 child 페이지로 이동했을 경우에는 referrer 가 존재하기 때문에 뒤로가기를 하면 링크를 타고 타사 페이지로 이동하게 된다. 그런데 웹앱이라는 개념을 생각할 때 이것보다는 뒤로가기를 했을 때 메인 페이지로 돌아가고 싶을 수 있다.

이런 경우를 위해 조금더 신경을 쓰면 아래와 같이 바꿔줄 수 있다.


//뒤로갈 히스토리가 있으면,
if ( document.referrer && document.referrer.indexOf("naver.com") != -1 ) {
        // 뒤로가기
        history.back();
}

// 히스토리가 없으면,
else {
        // 메인 페이지로
        location.href = "http://m.naver.com";
}



한줄 짜리로 바꿔주면 아래와 같이 압축할 수 있다.
document.referrer&&-1!=document.referrer.indexOf("naver.com")?history.back():location.href="http://m.naver.com";


추천추천 : 206 추천 목록
번호 제목
3,026
 여러 도메인들 간 쿠키 공유하기
3,025
 태그 사이에 있는 텍스트를 추출
3,024
 [JQuery] textbox focus on off일때 숫자 콤마 보여주기
3,023
 쿠키 생성,가져오기,삭제
3,022
 사용자 함수 모음
3,021
 마우스,키보드 제한 ( 오른쪽클릭,드래그,영역선택등..)
3,020
 [HTML5] <video> - DOM으로 제어하기
3,019
 HTML5 video 태그에서 영상 좌우반전
3,018
 PHP - 특정 태그 및 문자열 추출, 제거
3,017
 [PHP] define과 defined의 차이
3,016
 우클릭 완벽차단 스크립트
3,015
 iframe 높이 100% 맞추기
3,014
 curl 함수를 이용한 HTTP REFERER 변경
3,013
 윈도우10 시스템 파일 및 Dism 검사
3,012
 텍스트 줄바꿈, 글자자르기 CSS
3,011
 jQuery Mobile에서 유용한 코드 10가지.
3,010
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,009
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,008
 [jQuery] jQuery Quick API
3,007
 [ transition ] 링크 hover 색상 변화 속도 조절
3,006
 PHP 5.3.0 에서 사라진 함수들 대체
3,005
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,004
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,003
 jQuery Mobile에서 유용한 코드 10가지.
3,002
 값이 배열 안에 존재하는지 확인하는 in_array함수
3,001
 사용자가 웹브라우저에서 뒤로가기를 했을때 감지하는 방법
3,000
 [jQuery]버튼 활성화, 비활성화
2,999
 jQuery show() / hide() / toggle() 사용법
2,998
 jquery 여러가지 이벤트
2,997
 border-radius 속성
2,996
 네이버 오픈API 음성합성 API 사용하는 PHP 샘플코드
2,995
 UTF8 한글 자르기..
2,994
 iconv 에러 발생시 계속 처리하기 옵션
2,993
 [PHP] 현재 페이지의 도메인 , URL 정보 알아내기.
2,992
 [PHP] 막강 기능 배열..
목록
추억의가요방(가사포함)
인기절정뽕짝파티
인기트로트모음
지루박디스코메들리
밤무대애창곡
전자올겐경음악
세월따라노래따라
가슴시린트로트
트로트쌍쌍파티
7080추억속으로
종합성인가요방
못잊을옛날노래
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
POP TOP BEST

최신인기가요특집
추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
가요축제\트롯1번지
댄스\메들리\리믹스
카페\명상\경음악\기타
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.