[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
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19)
      • 일기장 (4)
      • 파이썬 (131)
        • Basic (42)
        • 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 (5)
      • 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)
  • 인기 글

  • 태그

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

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

티스토리툴바