자주 묻는 질문(FAQ)

여기에서 질문에 대한 답변을 찾을 수 없는 경우 Chrome 웹 스토어 FAQ, Stack Overflow의 [google-chrome-extension] 태그, chromium-extensions 그룹 또는 스토어 도움말을 참조하세요.

일반

Chrome 확장 프로그램이란 무엇인가요?

Chrome 확장 프로그램은 Chrome 브라우저 내에서 실행되고 추가 기능, 타사 웹사이트 또는 서비스와의 통합, 맞춤설정된 탐색 환경을 제공하는 애플리케이션입니다.

확장 프로그램 개발을 위해 Chrome을 설정하려면 어떻게 해야 하나요?

확장 프로그램을 지원하는 Chrome 버전을 사용하고 있다면 자체 확장 프로그램을 작성하는 데 필요한 모든 것을 갖추고 있습니다. 개발자 모드를 사용 설정하여 시작할 수 있습니다.

Chrome 메뉴 아이콘을 클릭하고 도구 메뉴에서 확장 프로그램을 선택합니다. 오른쪽 상단의 '개발자 모드' 체크박스가 선택되어 있는지 확인합니다. 이제 확장 프로그램을 새로고침하고 패키지 확장 프로그램인 것처럼 압축해제된 파일 디렉터리를 로드하는 등의 작업을 할 수 있습니다. 전체 가이드는 시작하기를 참조하세요.

Chrome용 확장 프로그램을 작성하는 데 사용되는 기술은 무엇인가요?

확장 프로그램은 개발자가 웹사이트를 만드는 데 사용하는 것과 동일한 표준 웹 기술을 사용하여 작성됩니다. HTML은 콘텐츠 마크업 언어로, CSS는 스타일 지정에, JavaScript는 스크립팅에 사용됩니다. Chrome은 HTML5 및 CSS3을 지원하므로 개발자는 확장 프로그램에서 캔버스, CSS 애니메이션과 같은 최신 개방형 웹 기술을 사용할 수 있습니다. 또한 확장 프로그램은 JSON 인코딩 및 브라우저와의 상호작용과 같은 기능을 수행하는 데 도움이 되는 여러 JavaScript API에 액세스할 수 있습니다.

브라우저가 로드될 때마다 웹에서 확장 프로그램을 가져오나요?

확장 프로그램은 설치 시 Chrome 브라우저에 의해 다운로드되며 성능 향상을 위해 로컬 디스크에서 실행됩니다. 그러나 확장 프로그램의 새 버전이 온라인으로 푸시되면 확장 프로그램을 설치한 모든 사용자에게 백그라운드에서 자동으로 다운로드됩니다. 확장 프로그램은 웹 서비스와 상호작용하거나 웹에서 새 콘텐츠를 가져오기 위해 언제든지 원격 콘텐츠를 요청할 수도 있습니다.

어떤 Chrome 버전이 어느 채널에 배포되었는지 어떻게 알 수 있나요?

현재 다양한 플랫폼에서 사용할 수 있는 Chrome 버전을 확인하려면 omahaproxy.appspot.com을 방문하세요. 해당 사이트에 다음과 비슷한 형식의 데이터가 표시됩니다.

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

각 줄은 다양한 플랫폼 및 채널 조합에 대한 정보를 나타냅니다. 나열된 플랫폼은 cf (Chrome 프레임), linux, mac, win, cros (ChromeOS)입니다. 나열된 채널은 canary, dev, beta, stable입니다. 채널 다음에 있는 2개의 4자리 숫자는 해당 플랫폼-채널 조합에 배포된 현재 및 이전 버전의 Chrome을 나타냅니다. 나머지 정보는 출시가 처음 푸시된 시기에 관한 메타데이터와 각 빌드와 연결된 버전 번호입니다.

기능

확장 프로그램에서 교차 도메인 Ajax 요청을 할 수 있나요?

예. 확장 프로그램에서 교차 도메인 요청을 할 수 있습니다. 자세한 내용은 이 페이지를 참고하세요.

확장 프로그램에서 타사 웹 서비스를 사용할 수 있나요?

예. 확장 프로그램에서 교차 도메인 Ajax 요청을 할 수 있으므로 원격 API를 직접 호출할 수 있습니다. JSON 형식으로 데이터를 제공하는 API는 특히 사용하기 쉽습니다.

확장 프로그램에서 JSON 데이터를 인코딩/디코딩할 수 있나요?

예. V8 (Chrome의 자바스크립트 엔진)은 JSON.stringify 및 JSON.parse를 기본적으로 지원하므로 코드에 JSON 라이브러리를 추가하지 않고도 여기에 설명된 대로 확장 프로그램에서 이러한 함수를 사용할 수 있습니다.

확장 프로그램에서 데이터를 로컬에 저장할 수 있나요?

예. 확장 프로그램은 localStorage를 사용하여 문자열 데이터를 영구적으로 저장할 수 있습니다. Chrome의 기본 제공 JSON 함수를 사용하면 복잡한 데이터 구조를 localStorage에 저장할 수 있습니다. 저장된 데이터에서 SQL 쿼리를 실행해야 하는 확장 프로그램의 경우 Chrome도 사용할 수 있는 클라이언트 측 SQL 데이터베이스를 구현합니다.

확장 프로그램에서 OAuth를 사용할 수 있나요?

예, OAuth를 사용하여 원격 데이터 API에 액세스하는 확장 프로그램이 있습니다. 대부분의 개발자는 OAuth 요청 서명 프로세스를 간소화하기 위해 JavaScript OAuth 라이브러리를 사용하는 것이 편리합니다.

확장 프로그램이 렌더링된 웹페이지 외부에 UI를 만들 수 있나요?

예, 확장 프로그램에서 Chrome 브라우저의 사용자 인터페이스에 버튼을 추가할 수 있습니다. 자세한 내용은 브라우저 작업페이지 작업을 참고하세요.

확장 프로그램으로 브라우저 창 외부에 있는 팝업 알림을 만들 수도 있습니다. 자세한 내용은 데스크톱 알림 문서를 참고하세요.

확장 프로그램이 Chrome 탭과 탐색 버튼에서 발생하는 클릭을 수신할 수 있나요?

아니요. 확장 프로그램은 API 문서에 설명된 이벤트만 리슨할 수 있습니다.

두 확장 프로그램이 서로 통신할 수 있나요?

예, 확장 프로그램에서 다른 확장 프로그램으로 메시지를 전달할 수 있습니다. 자세한 내용은 메시지 전달 문서를 참고하세요.

확장 프로그램에서 Google 애널리틱스를 사용할 수 있나요?

예. 확장 프로그램은 웹사이트와 마찬가지로 빌드되므로 Google 애널리틱스를 사용하여 사용량을 추적할 수 있습니다. 하지만 Google 애널리틱스 라이브러리의 HTTPS 버전을 가져오도록 추적 코드를 수정해야 합니다. 이 작업에 대한 자세한 내용은 이 가이드를 참조하세요.

확장 프로그램에서 chrome:// URL을 수정할 수 있나요?

아니요. 확장 프로그램 API는 새 버전의 브라우저가 푸시될 때 발생할 수 있는 이전 버전과의 호환성 문제를 최소화하도록 설계되었습니다. chrome:// URL에서 콘텐츠 스크립트를 허용하면 개발자가 이러한 페이지의 DOM, CSS, JavaScript에 의존하여 동일하게 유지되기 시작합니다. 이러한 페이지는 지금 업데이트 중이므로 이러한 페이지를 빠르게 업데이트할 수 없는 경우도 있습니다. 최악의 경우 이러한 페이지 중 하나를 업데이트하면 확장 프로그램이 손상되어 브라우저의 주요 부분이 더 이상 작동하지 않을 수 있습니다.

이러한 URL에서 호스팅되는 콘텐츠를 대체하는 것이 허용되는 이유는 확장 프로그램 개발자가 브라우저의 내부 구현에 의존하지 않고 원하는 모든 기능을 구현해야 동일하게 유지되기 때문입니다.

확장 프로그램에서 사용자 상호작용 없이 브라우저/페이지 작업 팝업을 열 수 있나요?

아니요. 팝업은 사용자가 해당 페이지 또는 브라우저 작업을 클릭하는 경우에만 열 수 있습니다. 확장 프로그램은 프로그래매틱 방식으로 팝업을 열 수 없습니다.

사용자가 팝업을 클릭하여 팝업을 닫은 후에도 확장 프로그램에서 팝업을 계속 열 수 있나요?

아니요. 사용자가 팝업 외부의 브라우저 부분에 포커스를 맞추면 팝업이 자동으로 닫힙니다. 사용자가 클릭하여 팝업을 닫은 후에는 팝업을 계속 열어 둘 수 없습니다.

확장 프로그램이 설치/제거될 때 알림을 받을 수 있나요?

runtime.onInstalled 이벤트를 수신 대기하여 확장 프로그램이 설치되거나 업데이트될 때 또는 Chrome 자체가 업데이트될 때 알림을 받을 수 있습니다. 확장 프로그램이 제거될 때 해당하는 이벤트는 없습니다.

개발

확장 프로그램의 UI를 빌드하려면 어떻게 해야 하나요?

확장 프로그램은 HTML 및 CSS를 사용하여 사용자 인터페이스를 정의하므로 표준 양식 컨트롤을 사용하여 웹페이지와 마찬가지로 UI를 빌드하거나 CSS로 인터페이스의 스타일을 지정할 수 있습니다. 또한 확장 프로그램은 Chrome 자체에 일부 제한된 UI 요소를 추가할 수 있습니다.

localStorage에 데이터를 얼마나 저장할 수 있나요?

확장 프로그램은 localStorage에 최대 5MB의 데이터를 저장할 수 있습니다.

애플리케이션에 사용할 옵션 메뉴를 만들려면 어떻게 해야 하나요?

사용자가 확장 프로그램의 '옵션' 버튼을 클릭할 때 로드되는 간단한 HTML 페이지인 옵션 페이지를 만들어 사용자가 확장 프로그램의 옵션을 설정하도록 허용할 수 있습니다. 이 페이지는 localStorage에 설정을 읽고 쓸 수 있으며, 브라우저 간에 지속될 수 있도록 웹 서버에 옵션을 보낼 수도 있습니다.

확장 프로그램 개발자는 어떤 디버깅 도구를 사용할 수 있나요?

Chrome에 내장된 개발자 도구를 사용하여 확장 프로그램 및 웹페이지를 디버그할 수 있습니다. 자세한 내용은 확장 프로그램 디버깅 가이드를 참고하세요.

최상위 도메인 (TLD)에 와일드 카드 일치가 작동하지 않는 이유는 무엇인가요?

http://google.*/*와 같은 와일드 카드 일치 패턴은 TLD (예: http://google.es, http://google.fr)를 일치시키는 데 사용할 수 없습니다. 이러한 일치를 원하는 도메인으로만 제한하기가 복잡하기 때문입니다.

http://google.*/*의 예에서는 Google 도메인이 일치하지만 http://google.someotherdomain.com도 일치합니다. 또한 많은 사이트가 도메인의 일부 TLD를 소유하고 있지 않습니다. 예를 들어 http://example.*/*를 사용하여 http://example.comhttp://example.es를 일치시키려고 하지만 http://example.net는 위험한 사이트라고 가정해 보겠습니다. 확장 프로그램에 버그가 있는 경우 악성 사이트가 확장 프로그램의 증가된 권한에 액세스하기 위해 확장 프로그램을 공격할 수 있습니다.

확장 프로그램을 실행하려는 TLD를 명시적으로 열거해야 합니다.

확장 프로그램이 설치/제거될 때 관리 API에서 이벤트가 실행되지 않는 이유는 무엇인가요?

관리 API는 새 탭 페이지 대체 확장 프로그램을 만들기 위한 것이었습니다. 현재 확장 프로그램의 설치/제거 이벤트를 실행할 의도가 없었습니다.

확장 프로그램이 처음 실행되는지 여부를 어떻게 확인할 수 있나요?

runtime.onInstalled 이벤트를 수신할 수 있습니다. 이 FAQ 항목을 참고하세요.

기능 및 버그

버그를 발견한 것 같아요. 문제가 해결되었는지 어떻게 확인할 수 있나요?

확장 프로그램을 개발하는 동안 확장 프로그램 문서와 일치하지 않으며 Chrome 버그로 인한 동작을 발견할 수도 있습니다. 가장 좋은 방법은 적절한 문제 신고를 제출하고 Chromium팀에 동작을 재현하는 데 충분한 정보를 제공하는 것입니다.

이를 위해 따라야 하는 단계는 다음과 같습니다.

  1. 보고하려는 문제를 입증할 수 있는 최소한의 테스트 확장 프로그램을 제출합니다. 이 확장 프로그램에는 버그를 입증할 수 있는 코드가 최대한 적어야 합니다. 일반적으로 이 코드는 100줄 이하여야 합니다. 대부분의 경우 개발자는 이런 방식으로 문제를 재현할 수 없다는 사실을 알게 됩니다. 이는 버그가 자체 코드에 있다는 좋은 지표입니다.
  2. http://crbug.com에서 Issue Tracker를 검색하여 유사한 문제를 신고한 사람이 있는지 확인합니다. 확장 프로그램과 관련된 대부분의 문제는 component=Platform>Extensions에 제출되므로 chrome.tabs.executeScript 함수와 관련된 확장 프로그램 버그를 찾으려면 'component=Platform>Extensions Type=Bug chrome.tabs.executeScript'를 검색하세요. 이 결과 목록을 확인할 수 있습니다.
  3. 문제를 설명하는 버그를 발견하면 별표 아이콘을 클릭하여 버그가 업데이트될 때 알림을 받습니다. 버그에 응답하여 '동감' 또는 '언제 수정되나요?'라고 묻지 마세요. 이러한 업데이트가 이루어지면 수백 개의 이메일이 전송될 수 있습니다. 도움이 될 만한 정보 (더 나은 테스트 사례 또는 제안된 수정사항 등)가 있는 경우에만 의견을 추가하세요.
  4. 별표를 표시할 적절한 버그를 찾지 못한 경우 http://crbug.com/new에서 새로운 문제 신고를 제출하세요. 이 양식을 작성할 때는 구체적인 제목을 선택하고, 버그를 재현하는 단계를 설명하고, 예상되는 동작과 실제 동작을 설명해야 합니다. 보고서에 테스트 예를 첨부하고 적절한 경우 스크린샷을 추가합니다. 다른 사람이 문제를 재현하기 쉽게 보고서를 만들수록 버그가 즉시 수정될 가능성이 높아집니다.
  5. 버그가 업데이트될 때까지 기다립니다. 새로운 버그는 대부분 1주일 이내에 분류되지만 업데이트하는 데 시간이 더 오래 걸리는 경우도 있습니다. 문제가 언제 수정될지 묻는 버그에 회신하지 마세요. 2주 후에도 버그가 수정되지 않으면 버그의 링크를 포함하여 토론방에 메시지를 게시하세요.
  6. 처음에 토론 그룹에 버그를 신고했고 이 FAQ 항목으로 이동했다면 별표 표시하거나 신고한 버그의 링크를 포함하여 원래 대화목록에 답장하세요. 이렇게 하면 같은 문제를 겪는 다른 사람이 더 쉽게 올바른 버그를 찾을 수 있습니다.

기능 요청이 있습니다. 어떻게 신고해야 하나요?

확장 프로그램 개발 환경을 개선하기 위해 추가할 수 있는 기능 (특히 실험용 API와 관련된 경우)을 확인한 경우 Issue Tracker에서 적절한 요청을 제출해야 합니다.

이를 위해 따라야 하는 단계는 다음과 같습니다.

  1. http://crbug.com에서 Issue Tracker를 검색하여 누군가가 유사한 기능을 요청했는지 확인합니다. 확장 프로그램과 관련된 대부분의 요청은 component=Platform>Extensions에서 제출되므로 단축키와 관련된 확장 프로그램 기능 요청을 찾으려면 'component=Platform>Extensions Type=Feature shortcuts'를 검색하세요. 그러면 이 결과 목록이 표시됩니다.
  2. 요청과 일치하는 티켓을 찾으면 별표 아이콘을 클릭하여 버그가 업데이트될 때 알림을 받습니다. 버그에 응답하여 '동감' 또는 '언제 구현되나요?'라고 묻지 마세요. 이러한 업데이트가 이루어지면 수백 통의 이메일이 전송될 수 있습니다.
  3. 별표를 표시할 적절한 티켓을 찾지 못한 경우 http://crbug.com/new에서 새 요청을 제출하세요. 이 양식을 작성할 때는 설명이 포함된 제목을 선택하고 원하는 기능과 사용하려는 방법을 정확히 설명해야 합니다.
  4. 티켓이 업데이트될 때까지 기다립니다. 대부분의 새 요청은 1주일 이내에 분류되지만 업데이트하는 데 시간이 더 오래 걸리는 경우도 있습니다. 기능이 추가될 시기를 묻는 티켓에 회신하지 마세요. 2주 후에도 티켓이 수정되지 않으면 요청에 대한 링크를 포함하여 토론방에 메시지를 게시해 주세요.
  5. 처음에 토론 그룹에 요청을 보고하고 이 FAQ 항목으로 전달되었다면 별표 표시하거나 연 티켓의 링크를 포함하여 원래 대화목록에 답장해 주세요. 이렇게 하면 동일한 요청을 가진 다른 사용자가 올바른 티켓을 더 쉽게 찾을 수 있습니다.