JavaScript

23-01-05 JS ) location객체, history객체, navigator객체, 콜백함수, 쿠키, 세션 - localstorage와 sessionStorage

JadeStone 2023. 1. 5. 17:50

* location객체

-location.href = 주소;    -> 원하는 페이지로 바로 이동시켜줌.

*자바스크립트 새로고침

-location.reload()   -> 이게 들어가면 화면이 가만히 있다가 계속 새로고침이 들어가기 때문에 잘 사용하지는 않음.

 

location객체 사용 코드

<body>

    <button onclick="move()">이동</button>
    
    <script>

        function move(){
            //location.href = "https://www.naver.com"
        }


        //3초마다 새로고침
        // setInterval(function(){
        //     location.reload();
        // },3000);
    </script>
</body>

 

*history객체

-브라우저의 기록을 담당. 

-뒤로가기, 앞으로 가기 버튼을 생각하면 됨.

-history.go(-3);

 go는 앞뒤로 이동가능

 해서 3페이지씩 이동도 가능.

-history.forward()는 한단계 앞으로가기.

-history.back(); 는 한단계 뒤로가기.

-history.pushState(저장할데이터, 바꿀제목, 바뀐주소);

 pushState는 기록을 사이에 추가해주는 것.

history.pushState(저장할데이터, 바꿀제목, 바뀐주소);

-history.replaceState(저장할데이터, 바꿀제목, 바뀐주소); 

 브라우저의 기록을 바꾸는 것.

이전 페이지가 구글이었다면 이 메소드를 이용해서 이전 페이지를 네이버로 바꿀 수 있음.

 참고 사이트:

https://developer.mozilla.org/ko/docs/Web/API/History/replaceState 

(HTML&DOM) History API - 주소를 내 마음대로! - ZeroCho Blog

 

코드

<body>

    1번 페이지

    <button onclick="location.href='index06.html'">페이지이동</button>
    
    <h3>리플레이스 스테이트</h3>
    <button onclick="func()">기록변경하기</button>

    <script>
        function func(){
            // history.pushState(null, '','변경.html');//브라우저 기록추가

            history.replaceState('', '', null);//브라우저의 기록을 변경
        }

        //기록을 변경해서 사용할 데이터를 ''로 바꿔주면, 사용자가 뒤로가기 버튼을 누른것을 감지할 수 있음.
        //history.state속성으로 replaceState에 담은 데이터(매개변수 중 첫번째 부분)를 확인이 가능함.
        if(history.state ==''){//공백도 데이터임
            alert("기록이 변경됨");
        }

    </script>

</body>

확인

index05 에서 기록변경하기 버튼  클릭. 

브라우저의 기록이 변경됨.

페이지 이동 버튼 클릭해서 index06으로 이동

뒤로가기 버튼 클릭

조건에 걸어두었던 경고창이 발생함.

 

#navigator객체

-navigator 객체는 현재 사용하고있는 브라우저의 정보를 담고 있는 객체입니다.

-브라우저의 종류나 모바일에서 접속했는지 등을 확인할 수 있습니다.

-navigator 객체의 userAgent 속성은 현재 사용중이 브라우저가 어떤것인지에 대해서 값을 갖고 있습니다.

확인)

userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"

 

 

코드

<body>
    
    <script>
        var userAgent = navigator.userAgent.toLowerCase();

        // console.log(navigator);
        // console.log(userAgent.lastIndexOf("edg")); 

        //사용자가 접속한 브라우저를 userAgent라는 속성으로 알 수 있음.
        if(userAgent.lastIndexOf("edg") != -1){
            console.log("엣지");
        } else if(userAgent.lastIndexOf("firefox") != -1){
            console.log("파이어폭스");
        } else if(userAgent.lastIndexOf("whale") != -1){
            console.log("웨일");
        } else if(userAgent.lastIndexOf("chrome") != -1){
            console.log("크롬");
        }

    </script>

</body>

결과

크롬 브라우저에서 실행하였음.

 

*geolocation.getCurrentPosition() 

-현재 위치정보를 얻어옵니다.

console.log(navigator);  이렇게 navigator객체를 출력해보면 아래와 같이 다양한 속성과 값들이 나옵니다.

geolocation 이라는 속성을 누르면 사용할 수 있는 많은 함수 리스트가 있습니다.

그중에 getCurrentPosition()이라는 함수를 사용할 수 있음을 확인 할 수 있습니다.

 

사용예시)

navigator.geolocation.getCurrentPosition(success, fail); 

//success와 fail은 둘다 콜백함수입니다. 콜백함수에 관해서는 맨 아래 오늘의 기억할 내용란에서 마저 확인.

 

 

코드

<body>
    
    <script>
        //console.log(navigator);
        //콜백 - 호출하면 다시 거기다가 내가 결과를 돌려줄게
        navigator.geolocation.getCurrentPosition(success, fail);

        function success(result){//위치정보 조회에 성공하면 success함수를 실행
            console.log(result.coords);
            console.log(result.coords.latitude);//위도
            console.log(result.coords.longitude);//경도
        }
        function fail(result){//위치정보를 실패하면 fail함수를 실행
            console.log(result);
        }
    </script>

</body>

확인

 

#쿠키, 세션

*쿠키

-브라우저에 저장

-같은 키의 쿠키가 생성되면 기존의 쿠키에 새 쿠키가 덮어씌어짐.

-쿠키 접근

 document.cookie

-쿠키 만드는 법:

document.cookie = "키=값; path=/; expires="+ date.toUTCString();

 

-참고: https://developer.mozilla.org/ko/docs/Web/API/Document/cookie

 

*쿠키만들기 - 코드

<body>

    쿠키이름:<input type="text" id="cookieName">
    쿠키벨류:<input type="text" id="cookieValue">
    <button id="btn">쿠키만들기</button>

    <script>
        // document.cookie = "키=값;";
        // document.cookie = "키=값; expires=UTC스트링시간타입";

        // var date = new Date();
        // date.setMinutes(date.getMinutes() + 1);//지금시간으로 부터 1분 뒤
        // console.log(date);
        //path=/; path는 쿠키가 생성된 도메인인데 생략을 해도 되기때문에 /를 썼음.
        // document.cookie = "키=값; path=/; expires="+ date.toUTCString();

        var cookieName = document.getElementById("cookieName");
        var cookieValue = document.getElementById("cookieValue");



        var btn = document.getElementById("btn");
        btn.onclick = function(){

            var date = new Date();
            date.setHours(date.getHours() + 1);//지금시간으로 부터 1시간 뒤

            var key = cookieName.value;//사용자가 입력한 값
            var val = cookieValue.value;//사용자가 입력한 값

            var cookie = "";
            cookie +=  key + "=" + val + ";"; 
            cookie += "path=/;";
            cookie += "expires=" + date.toUTCString();

            document.cookie = cookie;

            // document.cookie = "키=값; path=/; expires="+ date.toUTCString();

        }

    </script>
    
</body>

 

*쿠키사용 - 코드

<body>

    <h3>1번페이지에서 만든쿠키를 사용할거야</h3>

    <input type="text" id="findCookie">
    <button id="btn">찾을쿠키명</button>

    <script>
        console.log(document.cookie)
        
        var findCookie = document.getElementById("findCookie");

        var btn = document.getElementById("btn");
        btn.onclick = function() {

            //사용자가 입력한값
            var find = findCookie.value; 

            var arr = document.cookie.split("; ");
            //반복을 이용해서 쿠키를 찾음
            for(i in arr ) { //i는 인덱스
                console.log(arr[i]);
                if(arr[i].indexOf(find) != -1) { //입력한 값이 있다면
                    // console.log('쿠키있음')

                    //replaceALl(" ","") 원래 공백이 있는건지 물어보기. -> 혹시 있을지 모르는 공백을 지우기 위해서 처리해준거라고 들었음.
                    var value = arr[i].replaceAll(" ", "").replace(find+"=", ""); //값
                    // console.log("키:" + find);
                    // console.log("값:" + value);


                }
            }

        }

    </script>

</body>

 

#쿠키 만들기 실습

*main.html 

<body>

    <h1>메인화면</h1>
    <script>
        window.onload = function(){
            
            // console.log(document.cookie);
            var cookie = document.cookie;
            if(cookie.indexOf("popup") != -1){
                return;
            }

            window.open("popup.html","메인창", "width=500px, height=500px");
        }
    </script>
    
</body>

*popup.html

<body>

    <h3>내용</h3>
    <h2 style="display: inline-block;">오늘 하루 이 창을 열지 않기</h2>
    <input type="checkbox" id="check">

    <script type="text/javascript" src="popup.js"></script>
    
</body>

*popup.js

var check = document.querySelector("#check");
check.onclick = function(){
    var cuki = "popup=done; path:/; expires=";
    var date = new Date();
    // console.log(date);
    date.setDate(date.getDate()+1);
    date.setHours(0);
    date.setMinutes(0);
    date.setSeconds(0);

    // console.log(date);
    // console.log(date.toUTCString());

    cuki += date.toUTCString();

    document.cookie = cuki
    window.close();
}

 

*세션

     -localstorage와 sessionStorage은 브라우저의 키=값 형태로 데이터를 저장하는 브라우저 측의 세션입니다.
     -localStorage는 브라우저를 종료하더라도 지속됩니다.
     -sessionStorage는 브라우저를 종료하면 사라집니다.

      ★쿠키와 다른점은
      -쿠키는 서버(코딩작업 하는 곳)간 전송이 가능합니다.
      -스토리지는 브라우저(클라이언트-사용자가 이용하는 곳)에서만 사용할 수 있습니다.
        // setItem(key, value) – 키-값 쌍을 보관합니다.
        // getItem(key) – 키에 해당하는 값을 받아옵니다.
        // removeItem(key) – 키와 해당 값을 삭제합니다.
        // clear() – 모든 것을 삭제합니다.
        // key(index) – 인덱스(index)에 해당하는 키를 받아옵니다.
        // length – 저장된 항목의 개수를 얻습니다.

        ★sessionStorage는 localStorage 자리에 대신 넣어주면 됩니다.
<body>
    
    <h3>로컬스토리지 사용하기</h3>

    <button onclick="createSession();">세션만들기</button>
    <button onclick="removeSession();">세션삭제하기</button>

    <script>
        /*
        localstorage와 sessionStorage은 브라우저의 키=값 형태로 데이터를 저장하는 브라우저 측의 세션입니다.
        
        localStorage는 브라우저를 종료하더라도 지속됩니다.
        sessionStorage는 브라우저를 종료하면 사라집니다.

        쿠키와 다른점은 
        -쿠키는 서버간 전송이 가능합니다.
        -스토리지는 브라우저에서만 사용할 수 있습니다.
        */

        function createSession(){
            //저장
            //스토리지에는 순수한 문자열만 저장이 됩니다
            //그래서 obj를 저장하려면 JSON.stringify() 치환해서 저장하면 좋습니다.
            localStorage.setItem("aaa","홍길동");
            localStorage.setItem("bbb",JSON.stringify([1,2,3]));
            

            //사용
            var aaa = localStorage.getItem("aaa");//키
            var bbb = localStorage.getItem("bbb");

            console.log(aaa);
            console.log(JSON.parse(bbb));
        }

        function removeSession(){
            // localStorage.removeItem("aaa");//삭제
            localStorage.clear();//로컬스트리지 전부삭제
        }

        // setItem(key, value) – 키-값 쌍을 보관합니다.
        // getItem(key) – 키에 해당하는 값을 받아옵니다.
        // removeItem(key) – 키와 해당 값을 삭제합니다.
        // clear() – 모든 것을 삭제합니다.
        // key(index) – 인덱스(index)에 해당하는 키를 받아옵니다.
        // length – 저장된 항목의 개수를 얻습니다.

        //sessionStorage는 localStorage 자리에 대신 넣어주면 됩니다.
        


    </script>

</body>

 

 

 

<기억할 내용>

#콜백함수 (엄청 중요함)

*호출하면 다시 거기다가 내가 결과를 돌려줄게

 

참고싸이트:

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%BD%9C%EB%B0%B1-%ED%95%A8%EC%88%98

 

코드

<body>

    <h3>콜백함수</h3>

    <script>
        //success는 함수임.
        function geolocation(success, fail){

            //처리........몇초가 걸리지..?
            setTimeout(function(){

                //성공..
                success("결과");//대신실행

            },5000);

        }

        //사용자
        geolocation(success, fail);

        function success(result){//이 success함수가 콜백함수가 되는거.
            console.log(result);//실행되는데 5초가 걸리고, 성공시에 result라는 변수로 결과를 받을 수 있음.
        }
        
        function fail(){

        }

        // geolocation(function(result){
        //     console.log(result); //결과..
        // }, function(){});
    </script>
    
</body>

 

 

 

#JS파일을 사용하는 경우.

*<script type="text/javascript" src="파일명.js"></script>

이 스크립트 태그를 head 부분에 넣을지 body 하단부에 넣을지 잘 생각해서 넣어야한다.

*JS파일 사용시 주로 많이 사용하는 함수 사용 방식 = 인라인 형식

-JS 파일내에 필요한 기능별로 함수들을 선언해 놓는다.

-태그 안에 onclick 를 작성하고 함수를 호출하는 식 (인라인형식)으로 대게 코드를 작성하고는 함.