Пример базового расширения
Давай сделаем простейшее 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 и настраиваем внешний вид