크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 !

어느 날 잘쓰고 있던 학교 선배님이 만든 LMS(학습 관리 시스템)기능 확장프로그램이 학교 사이트 개편으로 인해 더 이상 쓸 수가 없어져서..내가 만들어야겠다고 생각했다..구조를 보면 간단하다. HTML+CSS+JavaScript 를 사용해서 충분히 만들 수 있다. c

Development·
크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 !

크롬 확장프로그램 개발


어느 날 잘쓰고 있던 학교 선배님이 만든 LMS(학습 관리 시스템)기능 확장프로그램이 학교 사이트 개편으로 인해 더 이상 쓸 수가 없어져서..내가 만들어야겠다고 생각했다..

구조

크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 ! 크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 !

구조를 보면 간단하다. HTML+CSS+JavaScript 를 사용해서 충분히 만들 수 있다.

  • contentscript.js 사용자가 방문하는 영역에서 작동하는 스크립트 페이지의 현재 상태에 대한 정보를 전달한다. 현재 페이지의 DOM을 읽어와서 조작이 가능하다.

  • background.js 브라우저 영역에서 작동하는 스크립트 플러그인의 이벤트 핸들러 중요한 모든 이벤트 리스너가 여기 저장된다. 이벤트가 트리거 되고, 할당된 로직을 실행할 때까지 inactive 상태로 유지된다.

  • popup.js 시각적인 기능을 담당한다. HTML과 직접 상호작용하고, background 스크립트와 함께 API를 호출 popup.html이 index.html과 같은 의미이다.

크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 ! 크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 !

크롬 설정을 누르면 확장 프로그램에 대해서 확인할 수 있다.

확장 프로그램 관리와 Chrome 웹 스토어 방문하기가 있는데 생각보다 크롬 확장프로그램을 사용을 안하는 사람이 많다.

개발자라면 도움이 되는 확장 프로그램이 많다!! CSS viewer 라던가.. Json Viewer라던가.. 코테문제를 풀면 자동으로 깃허브에 저장된다던가..!

파일을 드래고 하거단 로드를 할 수 있는데 기본적으로

menifest 파일이 존재해야한다!!!!

Manifest 파일의 핵심 역할

Chrome 확장 프로그램의 manifest 파일(manifest.json)은 확장 프로그램의 DNA다. 이 파일은 다음과 같은 중요한 기능을 한다:

> - 확장 프로그램 신원 확립:
>name, version, description 필드에 기본 정보가 들어간다.
이 정보로 사용자와 Chrome 웹 스토어가 프로그램을 식별한다.
- 권한 선언:
>permissions 배열에 필요한 권한이 나열된다.
이는 사용자의 프라이버시와 보안을 지킨다.
- 리소스 정의:
>icons, action 등에 시각적 요소의 위치가 지정된다.
사용자 인터페이스 관련 파일들의 경로가 여기에 있다.
- 백그라운드 로직 설정:
>background 섹션에 서비스 워커나 백그라운드 페이지가 정의된다.
확장 프로그램의 '두뇌' 역할을 하는 스크립트가 여기에 지정된다.
- 콘텐츠 스크립트 선언:
>content_scripts 섹션에 웹 페이지에 삽입될 스크립트가 정의된다.
이를 통해 확장 프로그램이 웹 페이지와 상호작용한다.
- 보안 정책 설정:
>content_security_policy에 확장 프로그램의 보안 정책이 정의된다.
XSS 공격 등으로부터 확장 프로그램을 보호한다.
- API 버전 명시:
>manifest_version에 사용하는 manifest 파일의 버전이 지정된다.
이에 따라 Chrome이 확장 프로그램을 해석하고 실행한다.
- 웹 접근 범위 정의:
>host_permissions에 접근 가능한 웹 사이트가 지정된다.
사용자의 동의 하에 특정 도메인에 대한 접근 권한이 부여된다.
- 국제화 지원:
>default_locale과 관련 리소스 파일로 다국어를 지원한다.
이를 통해 전 세계 사용자를 위한 현지화가 가능하다.
- 웹 접근성 기능:
>commands 섹션에 키보드 단축키가 정의된다.
이로써 사용자 경험이 향상되고 접근성이 개선된다.

천천히 읽어보면 좋다 !

menifest작성이 끝났다면 popup,contentscript,background를 작성하면 간단한 확장프로그램은 만들 수 있다.

배경색을 바꾸는 확장프로그램을 만들어 보자 !!

// manifest.json
{
"name": "Simple Change Color",
"description": "현재 탭의 배경색을 변경하고 텍스트를 추가하는 간단한 MV3 확장 프로그램",
"version": "1.0.0",
"manifest_version": 3,
"permissions": [
"activeTab",
"scripting"
],
"host_permissions": [
"<all_urls>"
],
"action": {
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"contentScript.js"
],
"run_at": "document_idle"
}
]
}
// popup.html
<!DOCTYPE html>
<html>
<head>
<title>Change background Color</title>
</head>
<body>
<button id="changeColor">background Color change</button>
<button id="addText">text add</button>
<script src="popup.js"></script>
</body>
</html>
// popup.js
document.getElementById('changeColor').addEventListener('click', async () => {
let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
return;
}
if (tab && !tab.url.startsWith("chrome://")) {
try {
await chrome.scripting.executeScript({
target: { tabId: tab.id },
function: setPageBackgroundColor,
});
console.log("Script executed successfully");
} catch (error) {
console.error("Error executing script:", error);
}
} else {
console.error("Cannot execute script on this page");
}
});
function setPageBackgroundColor() {
document.body.style.backgroundColor = `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`;
}
document.getElementById('addText').addEventListener('click', async () => {
let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
return;
}
if (tab && !tab.url.startsWith("chrome://")) {
try {
const response = await chrome.tabs.sendMessage(tab.id, {action: "addText"});
console.log("Message sent successfully", response);
} catch (error) {
console.error("Error sending message:", error);
// Content Script가 로드되지 않았을 수 있으므로, 스크립트를 주입하고 다시 시도합니다.
try {
await chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ["contentScript.js"]
});
const response = await chrome.tabs.sendMessage(tab.id, {action: "addText"});
console.log("Message sent successfully after injecting content script", response);
} catch (injectError) {
console.error("Error injecting and executing content script:", injectError);
}
}
} else {
console.error("Cannot send message to this page");
}
});
// background.js
chrome.runtime.onInstalled.addListener(() => {
console.log('배경색 변경기가 설치되었습니다.');
});
// contentScript.js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "addText") {
const newElement = document.createElement('div');
newElement.textContent = '이 텍스트는 확장 프로그램에 의해 추가되었습니다!';
newElement.style.position = 'fixed';
newElement.style.top = '10px';
newElement.style.right = '10px';
newElement.style.backgroundColor = 'yellow';
newElement.style.padding = '10px';
newElement.style.zIndex = '9999';
document.body.appendChild(newElement);
sendResponse({status: "Text added successfully"});
}
return true; // 비동기 응답을 위해 필요합니다.
});

파일은 위 주석에 나와있는 것처럼 나눠야 한다.

크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 !

이렇게 파일이 만들어지면 위에서 확장프로그램 개발자모드를 체크! 하고 파일을 로드하면 된다.

크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 ! 크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 ! 크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 ! 크롬확장프로그램 만들기 - 가이드라인! 확장프로그램 구조 설명 !

이런식으로 작동이 잘 되는걸 볼 수 있다. !!