Пример базового расширения
Давай сделаем простейшее Chrome расширение, которое:
- 📌 Вставляет кнопку на любую страницу (через
content.js). - 📌 При нажатии на кнопку отправляет сообщение в
background.js. - 📌
background.jsсчитает количество нажатий на кнопку и сохраняет их в локальное хранилище (chrome.storage). - 📌 Выводит обновлённый счётчик в консоль.
📂 Структура проекта:
/my-chrome-extension
|-- manifest.json
|-- background.js
|-- content.js
|-- icon.png (если хочешь добавить иконку, не обязательно)
📄 manifest.json:
{
"manifest_version": 3,
"name": "Click Counter Extension",
"version": "1.0",
"description": "Считает количество нажатий на кнопку.",
"permissions": ["storage", "activeTab", "scripting"],
"background": {
"service_worker": "background.js"
},
"host_permissions": ["<all_urls>"],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
}
📄 background.js (Service Worker):
chrome.runtime.onInstalled.addListener(() => {
console.log("Расширение установлено!");
});
chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
if (message.type === "increment") {
const result = await chrome.storage.local.get(['counter']);
const count = (result.counter || 0) + 1;
await chrome.storage.local.set({ counter: count });
console.log(`Обновлённый счётчик: ${count}`);
sendResponse({ counter: count });
}
return true; // Сообщает Chrome, что ответ будет асинхронным.
});
📄 content.js (Скрипт для страниц):
(function() {
// Создаём кнопку
const button = document.createElement('button');
button.innerText = "Нажми на меня";
button.style.position = "fixed";
button.style.bottom = "20px";
button.style.right = "20px";
button.style.zIndex = "1000";
button.style.padding = "10px";
button.style.fontSize = "14px";
document.body.appendChild(button);
// При нажатии отправляем сообщение в background.js
button.addEventListener('click', () => {
chrome.runtime.sendMessage({ type: "increment" }, (response) => {
alert(`Обновлённый счётчик: ${response.counter}`);
});
});
})();
🔍 Что здесь происходит:
manifest.json:- Указано, что используется
background.jsкак Service Worker. content.jsавтоматически подключается ко всем URL черезcontent_scripts.
- Указано, что используется
background.js(Service Worker):- Ждёт сообщений типа
"increment". - Считывает текущий счётчик (
counter) изchrome.storage.local, увеличивает на 1 и сохраняет обратно. - Отправляет ответ с обновлённым счётчиком.
- Ждёт сообщений типа
content.js:- Встраивается в каждую открытую страницу.
- Создаёт кнопку, которая при нажатии отправляет сообщение в
background.js. - Получает ответ и выводит его пользователю через
alert().
💡 Как протестировать:
- 📁 Скопируй проект в отдельную папку.
- Открой Chrome и перейди на
chrome://extensions/. - Включи Developer mode (Режим разработчика).
- Нажми на кнопку
Load unpacked (Загрузить распакованное)и выбери папку с твоим проектом. - Открой любой сайт и увидишь кнопку в правом нижнем углу.
- Нажимай на неё и следи за сообщениями в консоли (
background.jsлогируется вchrome://extensions/->Service Workers->Inspect).
Дальнейшие усложнения на основе данного расширения
Часть 1: Делаем хоткей
Часть 2: Добавляем счётчик (badge) и попап
Часть 3: Делаем уведомления через Chrome и настраиваем внешний вид