mjeongriver
article thumbnail
Published 2023. 1. 5. 17:46
day61-js TIL/Javascript

1. day60-js 이어서 bom

1) location 객체

- 자바스크립트 페이지 이동: location.href = 주소;

- 자바스크립트 새로고침: location.reload()

 

* 예제(location 객체)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
  
    <button onclick="move()">네이버 이동하기</button>

    <script>

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

        //3초마다 새로고침
        // setInterval(function(){

        //     location.reload();

        // }, 3000);

    </script>

</body>
</html>

 

2) history객체

- history.go(-1); : 기록 이동

- history.back(); : 뒤로가기

- history.replaceState(저장 할 데이터 , 바꿀제목 , 바뀐주소 ); : 새로운 기록 추가(현재의 기록을 지운다거나, 앞에 null값을 변경 하는 데이터 조정을 통해 뒤로 가기 확인이 가능함)

- history.state : 페이지 데이터

- history.pushState: 브라우저에 기록을 추가하는 것

 

기록 변경하기 누르면 브라우저에 기록을 하나 추가해줌

 

여기서 

pushState와 replaceState의 차이점은 pushState는 히스토리 엔트리에 새로운 엔트리를 추가하는 메서드이고 replaceState는 현재의 히스토리 엔트리를 변경하는 것

 

* 예제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<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 속성으로 확인이 가능함
        if(history.state == ''){
            alert("기록이 변경됨");
        }

    </script>

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    2번 페이지 
    <button onclick="history.go(-1)">뒤로 가기</button>

</body>
</html>

 

3) navigator 객체

주요 함수

- appName(): 브라우저 이름을 얻어옵니다

- geolocation.getCurrentPosition() 현재 위치 정보를 얻어옵니다.

 

* 예제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

    <script>
        //사용자의 접속 환경을 userAgent속성으로 확인할 수 있음
        // console.log(navigator);
        // console.log(userAgent);
        var userAgent = navigator.userAgent.toLowerCase();
        console.log(userAgent);
        console.log(userAgent.lastIndexOf("edg"))
        if(userAgent.lastIndexOf("edg") != -1) {
            console.log("엣지");
        } else if(userAgent.lastIndexOf("chrome") != -1) {
            console.log("크롬");
        } else if(userAgent.lastIndexOf("firefox") != -1) {
            console.log("파이어폭스");
        } else if(userAgent.lastIndexOf("whale") != -1) {
            console.log("웨일");
        } 

    </script>


</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<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함수를 실행 

        }

    </script>
</body>
</html>

 

* 콜백 함수(매우 중요)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <h3>콜백함수</h3>


    <script>
        function geolocation(success, fail) {

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

                //성공
                success("결과"); //대신 실행
            }, 5000);
        }


        geolocation(success, fail);

        function success(result) {
            console.log(result); //실행 되는데 5초가 걸리고, 성공 시에 result라는 변수로 결과를 받을 수 있습니다.
        }

        function fail(result) {
            
        }

    </script>

</body>
</html>

 

2. cookie session - 동일한 이름의 쿠키는 덮어 씌어짐

자동으로 생성됨

* 예제(쿠키)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    쿠키 이름: <input type = "text" id = "cookieName">
    쿠키 value: <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분 뒤를 date 객체에 세팅(10초는 +10)
        console.log(date);
        document.cookie = "키=값; path=/; expires=UTC스트링" + 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>
</html>

 

* 예제 2 - 쿠키 사용

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<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("; ");
            // console.log(arr);

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

                }
            }

        }


    </script>

</body>

</html>

 

* 실습 - 오늘 하루 보지 않기 창을 쿠키로 사용하여 오늘까지 뜨지 않게끔 만들어줌(main, popup-html, popup.js)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <!-- 쿠키js -->
    <script src="popup.js"></script>

</head>
<body>
      
    <h2>메인화면</h2>

    <script>
        window.onload = function() {
            //팝업
            //getCookie(쿠키명)
            if( getCookie(mainPopup) != true) {
                window.open("popup.html", "메인팝업", "width=400px, height=400px");
            }

        }
    </script>



</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script src="popup.js"></script>
</head>
<body>

    <div>
        ....내용
    </div>

    오늘 하루 이창 열지않기<input type="checkbox" onclick="popupClose()">
    

    <script>
        function popupClose() {
            createCookie(); //호출
            window.close(); //팝업창 종료
        }
    </script>



</body>
</html>
var mainPopup = "mainPopup";

function createCookie() {

    var date = new Date();
    date.setDate( date.getDate() + 1); 
    date.setHours(0);
    date.setMinutes(0);
    date.setSeconds(0);

    var cookie = "";
    cookie += mainPopup + "=true;";
    cookie += " path=/;";
    cookie += " expires=" + date.toUTCString();

    document.cookie = cookie;
}

function getCookie(x) {

    var arr = document.cookie.split("; ");

    for(var i = 0; i < arr.length; i++) {
        if(arr[i].indexOf(x) != -1 ) {
            return true;
        }
    }
}

 

2. 2) 로컬 스토리지

배열로 넣었어도 배열로 안들어감

 

* 예제(로컬 스토리지)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <h3>로컬 스토리지 사용하기</h3>

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

    <script>
        /* 
        localstorage와 sessionStorage은 브라우저의 키=값 형태로 데이터를 저장하는 브라우저

        localstorage는 브라우저를 종료하더라도 지속됩니다.
        sessionStorage는 브라우저를 종료하면 사라집니다.

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

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

        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(bbb);
            // console.log(typeof bbb);
            console.log(JSON.parse(bbb)); //원본 유지
        }

        function removeSession() {
            localStorage.removeItem("aaa"); //삭제
        }
    </script>

</body>

</html>

'TIL > Javascript' 카테고리의 다른 글

day63-js  (0) 2023.01.09
day62-js  (0) 2023.01.06
day60-js  (0) 2023.01.04
day59-js  (1) 2023.01.03
day58-js  (0) 2023.01.02
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그