Уведомления через хром и настройка внешнего вида
Сделаем:
- Оповещения через уведомления Chrome.
- Настройки для изменения хоткеев и внешнего вида.
📂 Структура проекта (Обновлённая):
/my-chrome-extension
|-- manifest.json
|-- background.js
|-- content.js
|-- popup.html
|-- popup.js
|-- options.html (Новый файл)
|-- options.js (Новый файл)
|-- styles.css (Необязательно, но можно для оформления)
/icons/
|-- icon.png
📄 manifest.json (Обновлённый):
{
"manifest_version": 3,
"name": "Click Counter Extension",
"version": "1.0",
"description": "Считает количество нажатий на кнопку.",
"permissions": ["storage", "activeTab", "scripting", "notifications"],
"background": {
"service_worker": "background.js"
},
"host_permissions": ["<all_urls>"],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"commands": {
"trigger_click": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y"
},
"description": "Нажать на кнопку через хоткей"
}
},
"action": {
"default_popup": "popup.html",
"default_icon": "icons/icon.png"
},
"options_page": "options.html"
}
📄 background.js (Обновлённый):
async function updateBadge() {
const result = await chrome.storage.local.get(['counter']);
const count = result.counter || 0;
chrome.action.setBadgeText({ text: count.toString() });
chrome.action.setBadgeBackgroundColor({ color: "#4CAF50" });
}
async function showNotification(counter) {
chrome.notifications.create({
type: 'basic',
iconUrl: 'icons/icon.png',
title: 'Click Counter',
message: `Счётчик увеличен! Текущее значение: ${counter}`
});
}
chrome.runtime.onInstalled.addListener(() => {
console.log("Расширение установлено!");
updateBadge();
});
chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
if (message.type === "increment") {
const result = await chrome.storage.local.get(['counter', 'notificationsEnabled']);
const count = (result.counter || 0) + 1;
await chrome.storage.local.set({ counter: count });
updateBadge();
if (result.notificationsEnabled !== false) {
showNotification(count);
}
console.log(`Обновлённый счётчик: ${count}`);
sendResponse({ counter: count });
}
return true;
});
📄 options.html (Новый файл):
<!DOCTYPE html>
<html>
<head>
<title>Настройки</title>
<style>
body { font-family: Arial, sans-serif; padding: 10px; }
label { display: block; margin-bottom: 10px; }
</style>
</head>
<body>
<h2>Настройки расширения</h2>
<label>
<input type="checkbox" id="notificationsToggle"> Включить уведомления
</label>
<button id="saveBtn">Сохранить настройки</button>
<script src="options.js"></script>
</body>
</html>
📄 options.js (Новый файл):
document.addEventListener('DOMContentLoaded', async () => {
const notificationsToggle = document.getElementById('notificationsToggle');
const saveBtn = document.getElementById('saveBtn');
// Загрузка текущих настроек
const result = await chrome.storage.local.get(['notificationsEnabled']);
notificationsToggle.checked = result.notificationsEnabled !== false; // По умолчанию - true
// Сохранение настроек
saveBtn.addEventListener('click', async () => {
const isEnabled = notificationsToggle.checked;
await chrome.storage.local.set({ notificationsEnabled: isEnabled });
alert('Настройки сохранены!');
});
});
🔍 Что добавлено:
- Уведомления через Chrome API:
chrome.notifications.create()
используется вbackground.js
.- Пользователь видит уведомление, когда увеличивается счётчик.
- Страница настроек (
options.html
):- Позволяет включать/отключать уведомления.
- Сохраняет настройки в
chrome.storage.local
.
- Переключение уведомлений:
- Настройки читаются в
background.js
, чтобы определять, нужно ли показывать уведомления.
- Настройки читаются в
📌 Как протестировать:
- 📁 Загрузить расширение на странице
chrome://extensions/
. - 📄 Зайти в
chrome://extensions/
→ Найти расширение → Нажать на “Подробнее” → Нажать на “Параметры”. - ✅ Включить/отключить уведомления, сохранить.
- 📌 Нажимать на кнопку или использовать хоткей (
Ctrl+Shift+Y
) и проверять, показываются ли уведомления.
Настройки изменения горячих клавиш и внешнего вида
Давай добавим возможность изменения горячих клавиш и внешнего вида расширения через настройки.
📂 Новая структура проекта:
/my-chrome-extension
|-- manifest.json
|-- background.js
|-- content.js
|-- popup.html
|-- popup.js
|-- options.html
|-- options.js
|-- styles.css (для оформления)
/icons/
|-- icon.png
📄 manifest.json (Обновлённый):
{
"manifest_version": 3,
"name": "Click Counter Extension",
"version": "1.0",
"description": "Считает количество нажатий на кнопку.",
"permissions": ["storage", "activeTab", "scripting", "notifications"],
"background": {
"service_worker": "background.js"
},
"host_permissions": ["<all_urls>"],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"commands": {
"trigger_click": {
"suggested_key": {
"default": "Ctrl+Shift+Y",
"mac": "Command+Shift+Y"
},
"description": "Нажать на кнопку через хоткей"
}
},
"action": {
"default_popup": "popup.html",
"default_icon": "icons/icon.png"
},
"options_page": "options.html"
}
📄 background.js (Обновлённый):
Добавим обработчик для изменения горячих клавиш:
async function updateBadge() {
const result = await chrome.storage.local.get(['counter']);
const count = result.counter || 0;
chrome.action.setBadgeText({ text: count.toString() });
chrome.action.setBadgeBackgroundColor({ color: "#4CAF50" });
}
async function showNotification(counter) {
chrome.notifications.create({
type: 'basic',
iconUrl: 'icons/icon.png',
title: 'Click Counter',
message: `Счётчик увеличен! Текущее значение: ${counter}`
});
}
chrome.runtime.onInstalled.addListener(() => {
console.log("Расширение установлено!");
updateBadge();
});
chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
if (message.type === "increment") {
const result = await chrome.storage.local.get(['counter', 'notificationsEnabled']);
const count = (result.counter || 0) + 1;
await chrome.storage.local.set({ counter: count });
updateBadge();
if (result.notificationsEnabled !== false) {
showNotification(count);
}
console.log(`Обновлённый счётчик: ${count}`);
sendResponse({ counter: count });
}
return true;
});
// Обработчик горячих клавиш
chrome.commands.onCommand.addListener(async (command) => {
const result = await chrome.storage.local.get(['hotkey']);
const hotkey = result.hotkey || 'Ctrl+Shift+Y'; // По умолчанию Ctrl+Shift+Y
if (command === "trigger_click") {
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
if (tabs[0]) {
chrome.tabs.sendMessage(tabs[0].id, { type: "trigger_click" });
}
});
}
});
📄 options.html (Обновлённый):
<!DOCTYPE html>
<html>
<head>
<title>Настройки</title>
<style>
body { font-family: Arial, sans-serif; padding: 10px; }
label { display: block; margin-bottom: 10px; }
input[type="text"] { width: 100px; padding: 5px; }
button { margin-top: 10px; padding: 5px 10px; }
</style>
</head>
<body>
<h2>Настройки расширения</h2>
<label>
<input type="checkbox" id="notificationsToggle"> Включить уведомления
</label>
<label>
<input type="text" id="hotkeyInput" placeholder="Ctrl+Shift+Y"> Горячая клавиша
</label>
<button id="saveBtn">Сохранить настройки</button>
<script src="options.js"></script>
</body>
</html>
📄 options.js (Обновлённый):
document.addEventListener('DOMContentLoaded', async () => {
const notificationsToggle = document.getElementById('notificationsToggle');
const hotkeyInput = document.getElementById('hotkeyInput');
const saveBtn = document.getElementById('saveBtn');
// Загрузка текущих настроек
const result = await chrome.storage.local.get(['notificationsEnabled', 'hotkey']);
notificationsToggle.checked = result.notificationsEnabled !== false; // По умолчанию - true
hotkeyInput.value = result.hotkey || 'Ctrl+Shift+Y'; // По умолчанию - Ctrl+Shift+Y
// Сохранение настроек
saveBtn.addEventListener('click', async () => {
const isEnabled = notificationsToggle.checked;
const hotkey = hotkeyInput.value;
await chrome.storage.local.set({ notificationsEnabled: isEnabled, hotkey: hotkey });
alert('Настройки сохранены!');
});
});
📄 styles.css (Необязательный, но для оформления):
body {
font-family: Arial, sans-serif;
padding: 10px;
width: 250px;
}
button {
margin-top: 10px;
padding: 5px 10px;
cursor: pointer;
}
input[type="text"] {
width: 100px;
padding: 5px;
}
📌 Что добавлено:
- Изменение горячей клавиши:
- В настройках можно ввести свою горячую клавишу (например,
Ctrl+Shift+Z
), которая будет сохраняться вchrome.storage.local
. - Это значение используется в
background.js
для настройки команды.
- В настройках можно ввести свою горячую клавишу (например,
- Изменение внешнего вида:
- В HTML можно вводить горячую клавишу для изменения стандартного сочетания.
- Сохраняем её в хранилище и обновляем в расширении.
- Динамическое изменение горячих клавиш:
- В
chrome.commands.onCommand.addListener
обрабатываем изменение клавиши, если оно было настроено через интерфейс.
- В
📌 Как протестировать:
- 📁 Загрузить расширение на странице
chrome://extensions/
. - Зайти в Настройки расширения:
- Перейти на страницу
chrome://extensions/
→ Нажать на “Подробнее” → Нажать “Параметры”. - Ввести новую горячую клавишу в поле и сохранить настройки.
- Перейти на страницу
- Использовать горячую клавишу, чтобы проверить, работает ли она.
- Проверить уведомления, нажав на кнопку или используя горячую клавишу.