[Chrome Extension] Manifest V3 가이드

2025. 1. 21. 10:28·TypeScript
반응형

소개

크롬 확장프로그램 개발을 시작하기 위한 첫 걸음은 manifest.json 파일을 이해하는 것입니다. Manifest V3의 모든 설정과 사용법을 자세히 알아보겠습니다.

manifest.json 기본 구조

{
  "manifest_version": 3,
  "name": "My Extension",
  "description": "A simple Chrome extension",
  "version": "1.0.0",
  "permissions": [],
  "action": {},
  "background": {},
  "content_scripts": []
}

필수 필드 설명

기본 정보

{
  "manifest_version": 3,  // Manifest 버전 (V3 필수)
  "name": "My Extension",  // 확장프로그램 이름
  "version": "1.0.0",     // 버전 정보
  "description": "This is my first Chrome extension"  // 설명
}

아이콘 설정

{
  "icons": {
    "16": "images/icon16.png",
    "32": "images/icon32.png",
    "48": "images/icon48.png",
    "128": "images/icon128.png"
  }
}

주요 기능 설정

권한 설정

{
  "permissions": [
    "storage",           // 데이터 저장소 접근
    "tabs",             // 탭 정보 접근
    "activeTab",        // 현재 활성 탭 접근
    "scripting",        // 스크립트 실행 권한
    "notifications"     // 알림 권한
  ],
  "host_permissions": [
    "http://*/*",       // HTTP 사이트 접근
    "https://*/*"       // HTTPS 사이트 접근
  ]
}

백그라운드 워커

{
  "background": {
    "service_worker": "background.js",
    "type": "module"    // ES 모듈 사용 시
  }
}

콘텐츠 스크립트

{
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "css": ["styles/content.css"],
      "js": ["scripts/content.js"],
      "run_at": "document_end"
    }
  ]
}

팝업 설정

{
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/icon16.png",
      "32": "images/icon32.png"
    },
    "default_title": "Click Me!"
  }
}

고급 설정

웹 접근성 설정

{
  "web_accessible_resources": [{
    "resources": [
      "images/*.png",
      "scripts/*.js",
      "styles/*.css"
    ],
    "matches": ["https://*.example.com/*"]
  }]
}

명령어 설정

{
  "commands": {
    "_execute_action": {
      "suggested_key": {
        "default": "Ctrl+Shift+Y",
        "mac": "Command+Shift+Y"
      },
      "description": "Run extension"
    }
  }
}

개발자 도구 확장

{
  "devtools_page": "devtools.html",
  "permissions": ["devtools"]
}

실전 예제

북마크 매니저 확장프로그램

{
  "manifest_version": 3,
  "name": "Smart Bookmarks",
  "version": "1.0",
  "description": "Enhanced bookmark management",

  "permissions": [
    "bookmarks",
    "storage",
    "tabs"
  ],

  "action": {
    "default_popup": "popup/bookmark.html",
    "default_icon": {
      "16": "icons/bookmark16.png",
      "48": "icons/bookmark48.png"
    }
  },

  "background": {
    "service_worker": "background/bookmark-manager.js"
  }
}

웹 스크래퍼 확장프로그램

{
  "manifest_version": 3,
  "name": "Web Scraper Pro",
  "version": "1.0",

  "permissions": [
    "activeTab",
    "scripting",
    "downloads"
  ],

  "host_permissions": [
    "https://*/*"
  ],

  "content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["content/scraper.js"],
    "css": ["styles/scraper.css"]
  }],

  "action": {
    "default_popup": "popup/scraper.html"
  },

  "background": {
    "service_worker": "background/scraper-worker.js"
  }
}

보안 고려사항

최소 권한 원칙

{
  "permissions": [
    "activeTab"  // tabs 대신 activeTab 사용
  ],
  "host_permissions": [
    "https://specific-domain.com/*"  // 전체 도메인 대신 특정 도메인만
  ]
}

Content Security Policy

{
  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self'"
  }
}

디버깅 및 테스트

개발용 설정

{
  "name": "My Extension (Dev)",
  "version": "1.0.0-dev",
  "content_scripts": [{
    "matches": ["http://localhost:*/*"]
  }]
}

로깅 설정

{
  "background": {
    "service_worker": "background.js",
    "type": "module"
  },
  "permissions": ["storage"],
  "minimum_chrome_version": "88"
}

배포 준비

프로덕션용 manifest

{
  "manifest_version": 3,
  "name": "My Extension",
  "version": "1.0.0",
  "description": "Production ready extension",

  "permissions": [
    "activeTab",
    "storage"
  ],

  "action": {
    "default_popup": "popup.html"
  },

  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self'"
  }
}
저작자표시 비영리 변경금지 (새창열림)

'TypeScript' 카테고리의 다른 글

[JavaScript] 문자열 검색과 비교  (1) 2025.01.25
[Next.js] HTTP 요청 구현하기 : fetch vs axios  (0) 2025.01.24
next.config.js 커스터마이징  (0) 2025.01.08
[React] React.lazy와 Suspense  (2) 2024.12.26
[React] memo를 사용한 컴포넌트 최적화  (0) 2024.12.25
'TypeScript' 카테고리의 다른 글
  • [JavaScript] 문자열 검색과 비교
  • [Next.js] HTTP 요청 구현하기 : fetch vs axios
  • next.config.js 커스터마이징
  • [React] React.lazy와 Suspense
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    파이썬
    스크립트 실행
    codingtips
    list
    카페24리뷰
    카페24리뷰이관
    appdevelopment
    rtsp
    상품 리뷰 크롤링
    cv2
    ipcamera
    라떼우유
    유니티
    리스트
    긴유통기한우유
    devlife
    쇼핑몰리뷰
    스크립트 실행 순서
    리뷰관리
    스마트스토어리뷰
    C#
    셀레니움
    Python
    programming101
    programmerlife
    리뷰이관
    믈레코비타멸균우유
    unity
    learntocode
    codingcommunity
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
[Chrome Extension] Manifest V3 가이드
상단으로

티스토리툴바