투케이2K

558. (javaScript) 자바스크립트 SweetAlert 라이브러리 사용해 JSON Pretty 정렬 출력 팝업창 생성 및 클립보드 내용 복사 기능 수행 본문

JavaScript

558. (javaScript) 자바스크립트 SweetAlert 라이브러리 사용해 JSON Pretty 정렬 출력 팝업창 생성 및 클립보드 내용 복사 기능 수행

투케이2K 2026. 6. 22. 21:50
728x90
반응형

[개발 환경 설정]

개발 툴 : Edit++ / Vscode

개발 언어 : JavaScript

 

[소스 코드]

-----------------------------------------------------------------------------------------
[사전 설명 및 설정 사항]
-----------------------------------------------------------------------------------------

- 개발 환경 : Web


- 개발 기술 : JavaScript (자바스크립트) / SweetAlert / Alert


- 사전) 👉 SweetAlert 라이브러리 간략 설명 :  

  >> SweetAlert 는 👉 기존 alert(), confirm(), prompt()를 대체하기 위해 만들어진 JavaScript 기반 경고창(팝업) UI 라이브러리입니다.

  >> SweetAlert 장점 설명 : 

    - 디자인이 훨씬 이쁨
    - 버튼 커스터마이징 가능
    - HTML 요소 삽입 가능
    - Promise 기반 처리 가능

  >> SweetAlert 이 제공하는 타입 설명 : 
          
    - "success" : 성공
    - "error" : 에러
    - "warning" : 경고
    - "info" : 정보

-----------------------------------------------------------------------------------------





-----------------------------------------------------------------------------------------
[소스 코드]
-----------------------------------------------------------------------------------------

<!DOCTYPE HTML>
<html lang="ko" translate="no">
<head>
    <title>javaScriptTest</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- 반응형 구조 만들기 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">

    <!-- Chrome / Edge (Chromium)에서 자동 번역 기능을 완전히 비활성화 -->
    <meta name="google" content="notranslate">

    <!-- 내부 CSS 스타일 지정 -->
    <style>

      html, body {
        width: 100%;
        height: 100%;
        margin : 0 auto;
        padding : 0;
        border : none;
        background-color: #666;
      } 


      /* footer를 flex 컨테이너로 */
      .swal-footer {
        display: flex;
        align-items: center;
      }


      /* 버튼 간 간격 */
      .swal-footer .swal-button {
        margin-left: 8px;
      }


      /* preview 버튼 색상 (선택) */
      .btn-preview {
        background-color: #6f42c1;
        color: #fff;
      }


      /* JSON 정렬 에딧터 */
      .json-viewer {
        text-align: left;
        background: #1e1e1e;
        color: #fff;
        padding: 15px;
        border-radius: 8px;
        font-size: 16px;
        line-height: 1.5;
        max-height: 400px;
        overflow: auto;
        font-family: Consolas, monospace;
      }

    </style>





    <!-- [CDN 주소 설정] --> 
    <script src="https://code.jquery.com/jquery-latest.min.js"></script>

    <!-- [SweetAlert 라이브러리] -->
    <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>






    <!-- [자바스크립트 코드 지정] -->
    <script type="module">    


      // -----------------------------------------------------------------
      // ✅ [Window.onload 웹 브라우저 로드 완료]
      // -----------------------------------------------------------------
      window.onload = async function() {
        console.log("[window onload] : [html 최초 로드 및 이벤트 상시 대기 실시] : [start]");

        try {

          // ------------------------------------------------------
          // 🟦 [SweetAlert 기본 설명 정리]
          // ------------------------------------------------------
          // 1. SweetAlert 는 👉 기존 alert(), confirm(), prompt()를 대체하기 위해 만들어진 JavaScript 기반 경고창(팝업) UI 라이브러리입니다.
          // ------------------------------------------------------
          // 2. SweetAlert 장점 설명 : 
          // 
          // >> 디자인이 훨씬 이쁨
          // >> 버튼 커스터마이징 가능
          // >> HTML 요소 삽입 가능
          // >> Promise 기반 처리 가능
          // ------------------------------------------------------
          // 3. SweetAlert 이 제공하는 타입 설명 : 
          // 
          // "success" : 성공
          // "error" : 에러
          // "warning" : 경고
          // "info" : 정보
          // ------------------------------------------------------

          
          // 팝업창 호출 수행
          openAlertPopup();     

        }
        catch (exception) {
          console.error("[window onload] : [Exception] : ❌ 예외 상황 발생 : ", exception);

        }

      };







      function openAlertPopup() {
        console.log('openAlertPopup : start');
        
        try {

          // -------------------------------------------------
          // alert 팝업창에 표시 될 title 및 content 지정
          // -------------------------------------------------
          const title = "JSON 표시 팝업창";

          const jsonData = {name: "투케이", addr:"seoul"};

          const pre = document.createElement('pre');
          pre.className = 'json-viewer';

          //pre.textContent = JSON.stringify(JSON.parse(jsonData), null, 2); // String 데이터 인 경우
          pre.textContent = JSON.stringify(jsonData, null, 2); // Object 데이터 인 경우

          
          // -------------------------------------------------
          // alert 팝업창 표시 수행
          // -------------------------------------------------

          swal({
            title: title,
            content: pre,
            closeOnClickOutside: false, // 외부 클릭 ❌
            closeOnEsc: false, // ESC ❌
            buttons: {              
              preview_1: { // 추가 버튼 생성
                text: "복사",
                value: "preview_1",
                className: "btn-preview" // ✅ 동적 스타일 지정 클래스 명칭
              },              
              confirm: { // 기본 확인 버튼
                text: "확인",
                value: "confirm",
                visible: true   // ✅ 확인 버튼 표시 설정
              }
            },
          }).then(async (btnClick) => { // ✅ 버튼 클릭 이벤트 확인 : async 지정
            
            switch (btnClick) {              
              case "preview_1":
                console.log('preview_1 : 클립 보드 복사를 선택했습니다.');
                
                try {
                  await navigator.clipboard.writeText(pre.textContent);
                  
                  swal("알 림", "복사 성공", "info"); // 간단 팝업 표시
                } catch (err) {
                  swal("알 림", "복사 실패", "error"); // 간단 팝업 표시
                }
               
                break;
              default:
                console.log('confirm : 확인을 선택했습니다.');                
            }

          });

          
          // -------------------------------------------------
          // ✅ SweetAlert 렌더링 후 실행
          // -------------------------------------------------
          setTimeout(() => {            
            const previewBtns = document.querySelectorAll(".btn-preview");
            if (previewBtns.length === 0) return;
          
            // ✅ 마지막 "보기" 버튼의 컨테이너만 밀어냄
            const lastPreviewBtn = previewBtns[previewBtns.length - 1];
            lastPreviewBtn.parentElement.style.marginRight = "auto";

            console.log('btn-preview : style setting');
          }, 0);


        }
        catch(err){
          console.error("[openAlertPopup] : [Exception] : ❌ 예외 상황 발생 : ", err);
        }

      };


    </script>


</head>


<body>

</body>

</html>

-----------------------------------------------------------------------------------------





-----------------------------------------------------------------------------------------
[참고 사이트]
-----------------------------------------------------------------------------------------

▶️ [자바스크립트 SweetAlert 라이브러리 사용해 input 입력 받기 팝업창 생성 - prompt , text , number , password]

https://kkh0977.tistory.com/8788

https://blog.naver.com/kkh0977/224267047454


▶️ [자바스크립트 SweetAlert 라이브러리 사용해 팝업창 활성 시 확인 및 취소 버튼 외 동적 버튼 추가 생성 , 팝업창 자동 닫힘 방지 수행]

https://kkh0977.tistory.com/8784

https://blog.naver.com/kkh0977/224261592220


▶️ [자바스크립트 SweetAlert 라이브러리 사용해 메뉴 리스트 표시 및 메뉴 선택 팝업창 생성 수행 - radio list alert]

https://kkh0977.tistory.com/8783

https://blog.naver.com/kkh0977/224261583820


▶️ [sweet alert 라이브러리 사용해 커스텀 팝업창 표시 실시]

https://kkh0977.tistory.com/929

https://blog.naver.com/kkh0977/222419629546?trackingCode=blog_bloghome_searchlist


▶️ [sweet alert 라이브러리 사용해 커스텀 팝업창 표시 및 css width 사이즈 조절]

https://kkh0977.tistory.com/951

https://blog.naver.com/kkh0977/222424162186?trackingCode=blog_bloghome_searchlist


▶️ [toastr js 라이브러리 사용해 토스트 알림 메시지 표시 실시]

https://kkh0977.tistory.com/981

https://blog.naver.com/kkh0977/222429771901?trackingCode=blog_bloghome_searchlist

-----------------------------------------------------------------------------------------
 

[화면 출력]

 
728x90
반응형
Comments