1 minute read

Сделать хоткей — это отличная идея! Давай разберём, как можно связать нажатие горячей клавиши с действием в расширении.

📌 Идея:

Мы добавим обработчик горячих клавиш в background.js, который при срабатывании будет отправлять сообщение в content.js, чтобы выполнить действие кнопки.

📄 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"]
    }
  ],
  "commands": {
    "trigger_click": {
      "suggested_key": {
        "default": "Ctrl+Shift+Y",
        "mac": "Command+Shift+Y"
      },
      "description": "Нажать на кнопку через хоткей"
    }
  }
}

🔍 Новый блок: commands

  • "trigger_click" — Название команды.
  • "suggested_key" — Горячая клавиша, которую мы используем:
    • "default" — Для Windows / Linux.
    • "mac" — Для macOS.
  • "description" — Описание команды, которое можно увидеть на странице настроек расширений.

📄 background.js (Обновлённый):

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.commands.onCommand.addListener((command) => {
    if (command === "trigger_click") {
        // Отправляем сообщение на текущую активную вкладку
        chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
            if (tabs[0]) {
                chrome.tabs.sendMessage(tabs[0].id, { type: "trigger_click" });
            }
        });
    }
});

📄 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);

    // Функция нажатия на кнопку
    function clickButton() {
        chrome.runtime.sendMessage({ type: "increment" }, (response) => {
            alert(`Обновлённый счётчик: ${response.counter}`);
        });
    }

    // При клике по кнопке
    button.addEventListener('click', clickButton);

    // Слушаем сообщения от background.js
    chrome.runtime.onMessage.addListener((message) => {
        if (message.type === "trigger_click") {
            clickButton();
        }
    });
})();

🔍 Что изменилось:

  1. 📌 В manifest.json добавлен блок commands:
    • Теперь Chrome понимает, что ты хочешь использовать хоткей Ctrl+Shift+Y (или Command+Shift+Y на Mac).
  2. 📌 В background.js:
    • Добавлен обработчик события chrome.commands.onCommand, который ловит нажатия на горячие клавиши и отправляет сообщение в content.js.
  3. 📌 В content.js:
    • Теперь скрипт слушает сообщения с типом "trigger_click" и вызывает функцию clickButton().

📌 Как протестировать:

  1. 📁 Загрузить расширение на странице chrome://extensions/.
  2. 🔑 Нажать Ctrl+Shift+Y (или Command+Shift+Y на Mac) на любой странице.
  3. 📌 Если всё правильно настроено, кнопка “Нажми на меня” сработает без клика, а через хоткей!