Гид по технологиям

Как создать собственное расширение для Google Chrome

7 min read Разработка Обновлено 29 Mar 2026
Как создать расширение Google Chrome
Как создать расширение Google Chrome

Что такое расширение Google Chrome?

Логотип Google Chrome и иконки, символизирующие программирование и модули расширения

Современные браузеры, такие как Google Chrome, содержат множество встроенных функций. Расширения (extensions) позволяют добавлять новые возможности или изменять поведение браузера и сайтов. Расширение — это мини‑программа, написанная с использованием привычных веб‑технологий: HTML, CSS и JavaScript. В отличие от сайта, расширение может работать в фоновом режиме, подписываться на события в браузере и взаимодействовать со страницами, которые вы посещаете.

Короткое определение: расширение Chrome — это набор файлов и метаданных (манифеста), которые расширяют возможности браузера или сайтов.

Что мы создадим в этой статье?

Страница расширений Chrome и пример интерфейса расширения

Мы соберём простое расширение, которое открывает сайт MakeUseOf и выполняет случайный поиск по категориям сайта. Это компактный проект для обучения: вы пройдёте путь от структуры файлов до загрузки расширения в Chrome и тестирования его работы.

Чему вы научитесь:

  • создавать расширение Chrome с нуля
  • вставлять скрипт в веб‑страницу с помощью API расширений
  • добавлять обработчики событий и симулировать клики
  • генерировать случайные числа и работать с массивами
  • отлаживать и загружать расширение в chrome://extensions

Структура файлов проекта

Иллюстрация структуры файлов расширения Chrome

Для локальной разработки нам понадобится четыре файла в одной папке:

  • index.html — интерфейс всплывающего окна (popup)
  • style.css — стили для popup
  • script.js — код, который отправляет команду на страницу
  • manifest.json — метаданные и разрешения расширения

Файл manifest.json обязателен и должен называться именно так. Остальные файлы можно назвать по‑другому, но тогда нужно будет адаптировать ссылки в манифесте и HTML.

Шаг 1. Создание манифеста

Манифест сообщает Chrome, что делает расширение, какие у него версии и какие разрешения требуются. Для нашего простого примера манифест выглядит так:

{  
    "name": "MakeUseOf.com Automated Search",  
    "version": "1.0.0",  
    "description": "A search tool to find interesting articles",  
    "manifest_version": 3,  
    "author": "Samuel Garbett",  
"permissions": ["storage", "declarativeContent", "activeTab", "scripting"],  
"host_permissions": [""],  
    "action":{  
        "default_popup": "index.html",  
        "default_title": "MUO Auto Search"  
    }  
}

Примечание: в реальных расширениях host_permissions обычно содержит шаблоны URL (например, https://www.makeuseof.com/*), иначе код не сможет запускаться в целевых вкладках. В демонстрационном примере поле оставлено пустым, как в исходном материале, но ниже вы найдёте рекомендации по корректной настройке разрешений.

Шаг 2. HTML интерфейса и CSS

Ниже — минимальный popup с двумя кнопками: одна открывает сайт, другая запускает автоматизированный поиск.

index.html:

  
  
  
  
   MUO Auto Search  
  
     
  
     
  
  
  
  
  

MUO Auto Search

style.css:

html {  
    width: 400px;  
}  
body {  
    font-family: Helvetica, sans-serif;  
}  
h1 {  
    text-align: center;  
}  
#buttonOne {  
    border-radius: 0px;  
    width: 100%;  
    padding: 10px 0px;  
}  
#buttonTwo {  
    border-radius: 0px;  
    width: 100%;  
    padding: 10px 0px;  
    margin-top: 10px;  
}  

Эти файлы просты и служат только интерфейсом для запуска скрипта. Вы можете улучшать стиль и разметку по желанию (иконки, локализация, тёмная тема и т. п.).

Шаг 3. JavaScript: как работает автоматический поиск

Основная логика находится в script.js. Она вставляет функцию на текущую страницу и выполняет последовательность действий: открыть поле поиска, вставить случайный термин и отправить форму.

script.js:

// This function inserts our autoSearch function into the page's code  
function insertScript() {  
    // This selects the focused tab for the operation and passes the autoSearch function  
    chrome.tabs.query({active: true, currentWindow: true}, tabs => {  
        chrome.scripting.executeScript({target: {tabId: tabs[0].id}, function: autoSearch})  
    })  
      
    // This closes the extension pop-up to select the website search bar  
window.close();  
}  
      
// This is an event listener that detects clicks on our "Start Random Search" button  
document.getElementById('buttonTwo').addEventListener('click', insertScript)  
      
// This function selects a random topic from an array and   
function autoSearch() {  
    // This is an array to store our search terms  
const searchTerms = ["PC and Mobile", "Lifestyle", "Hardware", "Windows", "Mac",  
"Linux", "Android", "Apple", "Internet", "Security",  
"Programming", "Entertainment", "Productivity", "Career", "Creative",  
"Gaming", "Social Media", "Smart Home", "DIY", "Review"];  
      
    // This generates a random number between 0 and 19  
let selectorNumber = Math.floor(Math.random() * 20);  
      
    // This uses the random number to select an entry from the array  
let selection = searchTerms[selectorNumber];  
      
    // This simulates a click on the MUO website search icon  
document.getElementById("js-search").click();  
      
    // This sets the MUO website search bar as a variable  
var searchBar = document.getElementById("js-search-input");  
      
    // This inserts our random search term into the search bar  
    searchBar.value = searchBar.value + selection;  
      
    // This finishes the process by activating the website form  
document.getElementById("searchform2").submit();  
}

Технические замечания по коду:

  • chrome.scripting.executeScript — API manifest v3 для выполнения кода в контексте вкладки.
  • Для доступа к элементам страницы используются идентификаторы (ID). Если структура сайта поменяется, ID могут перестать существовать — тогда поиск сломается.
  • host_permissions и content scripts можно настроить так, чтобы скрипт запускался автоматически при загрузке страницы, без нажатия кнопок.

Шаг 4. Как загрузить расширение в Chrome

Скриншот страницы chrome://extensions в режиме разработчика

Откройте в Chrome адрес chrome://extensions. Включите Developer mode (режим разработчика) в правом верхнем углу.

Выбор папки с расширением для загрузки

Нажмите Load Unpacked и выберите папку с вашими файлами.

Закрепление расширения на панели инструментов Chrome

После загрузки нажмите на значок пазла и закрепите расширение для удобного доступа. Обратите внимание: данное расширение будет работать на сайте MakeUseOf только если элементы поиска имеют те же ID, что использованы в скрипте.

Когда это может не сработать

  • Если сайт изменит идентификаторы элементов (ID), автоматический ввод и отправка формы не найдут нужные DOM‑элементы.
  • Если host_permissions не настроены, chrome.scripting.executeScript не выполнит код в целевой вкладке.
  • Если сайт использует динамическую загрузку или SPA (single page application), элементы могут появляться с задержкой — нужно ждать появления элемента перед кликом.
  • Если у пользователя запрещён доступ к расширениям в корпоративной политике, расширение не загрузится.

Альтернативные подходы

  • Userscripts (Tampermonkey/Greasemonkey): вставляют пользовательский код прямо в страницы без упаковки в расширение; проще для быстрых правок.
  • Плагин для Firefox (WebExtensions): практически тот же API, но некоторые детали отличаются; можно портировать расширение.
  • Background scripts и content scripts: вместо вставки функции через executeScript можно прописать content script в манифесте, который будет работать на соответствующих сайтах.
  • Bookmarklet: короткий JavaScript в закладке, который запускает код на текущей странице; не требует установки расширения.

Рекомендации по безопасности и приватности

  • Не запрашивайте лишних разрешений. Чем шире scope permissions, тем выше риск и подозрительность у пользователей.
  • Для доступа только к makeuseof.com добавьте в host_permissions: “https://www.makeuseof.com/*”.
  • Отключите сбор данных и не отправляйте пользовательские запросы на сторонние серверы без ясного уведомления.
  • При использовании storage API сохраняйте только настройки, а не чувствительные данные.

Important: расширения могут запрашивать доступ к содержимому всех страниц. Пользователь должен понимать, зачем это нужно.

Чеклисты по ролям

Разработчик

  • создать структуру файлов и валидный manifest.json
  • протестировать локально через chrome://extensions
  • настроить host_permissions и протестировать на целевом сайте
  • добавить обработку ошибок и условия ожидания элементов

Ревьюер (код и безопасность)

  • проверить минимальность разрешений
  • проверить, не отправляются ли данные на внешние серверы
  • убедиться, что нет eval() и опасных строковых вставок

Пользователь

  • включить Developer mode
  • загружать расширения только из доверенных источников
  • проверять права доступа расширения в chrome://extensions

Критерии приёмки

  • Расширение загружается в chrome://extensions без ошибок.
  • Нажатие «Start Random Search» на вкладке MUO открывает поиск и показывает результаты соответствующего запроса.
  • При отсутствии элементов на странице расширение корректно обрабатывает ошибку (например, выводит console.log или не падает).
  • Расширение не запрашивает лишних разрешений.

Тесты и кейсы приёмки

  1. Позитивный кейс: установлен MUO, элементы с ID js-search и js-search-input присутствуют — поиск выполняется.
  2. Негативный кейс: элементы отсутствуют — скрипт не вызывает исключений, в консоли выводится понятное сообщение.
  3. Разрешения: host_permissions указаны только для https://www.makeuseof.com/* и расширение запускается.
  4. Совместимость: протестировать на актуальной версии Chrome и на одной предыдущей стабильной версии.

Отладка и откат (runbook)

Шаги при ошибках:

  1. Откройте chrome://extensions и включите режим разработчика.
  2. Проверьте консоль расширения (Inspect views) для popup и целевой вкладки.
  3. Вручную выполните document.getElementById(“js-search”) в консоли страницы — убедитесь, что элемент существует.
  4. Если ID изменился, обновите script.js или используйте querySelector с более стабильным селектором.
  5. Если необходимо откатить изменения — загрузите предыдущую версию папки или удалите расширение и загрузите старую копию.

Полезные сниппеты и шпаргалка

Минимальный manifest для popup (пример):

{
  "manifest_version": 3,
  "name": "Example",
  "version": "0.1",
  "action": {"default_popup": "index.html"},
  "permissions": ["scripting", "activeTab"],
  "host_permissions": ["https://www.makeuseof.com/*"]
}

Ожидание появления элемента перед кликом (content script):

function waitFor(selector, timeout = 3000) {
  return new Promise((resolve, reject) => {
    const start = Date.now();
    const iv = setInterval(() => {
      const el = document.querySelector(selector);
      if (el) { clearInterval(iv); resolve(el); }
      if (Date.now() - start > timeout) { clearInterval(iv); reject(new Error('Timeout')); }
    }, 100);
  });
}

waitFor('#js-search').then(el => el.click()).catch(err => console.log(err));

Совет: вместо document.getElementById используйте document.querySelector с более надёжными селекторами.

Модель мышления и лучшие практики

  • Разделение контекста: интерфейс (popup) должен только инициировать действие; весь DOM‑манипулирующий код должен выполняться в контексте страницы (content script или executeScript).
  • Минимализм разрешений: начинайте с минимального набора и добавляйте только те разрешения, которые действительно нужны.
  • Идём от простого к сложному: сначала сделайте рабочий prototype в локальном режиме, затем рефакторьте и улучшайте стабильность.

Совместимость и миграция

  • Manifest v3 обязателен для новых расширений в Chrome — учтите это при портировании старых манифестов v2.
  • Для переноса на Firefox WebExtensions обычно достаточно поправить поля манифеста и проверить API, но нужно тестировать конкретные вызовы.

Локальные альтернативы и особенности для русскоязычных пользователей

  • Если нужно искать по русскоязычным сайтам, проверьте кодировку и локализацию формы поиска сайта.
  • В регионах с ограниченным доступом к Google сервисам учитывайте сетевые особенности и сертификаты.

Когда стоит выбрать другой путь

  • Нужна сложная интеграция с сервером и сбор аналитики — лучше сделать отдельный сервис с OAuth и бэкендом.
  • Если нет желания публиковать расширение в магазине и нужна простота — userscript или bookmarklet часто быстрее.

Заключение

Это руководство показало базовый процесс создания простого расширения Google Chrome: структура файлов, манифест, HTML/CSS интерфейс и скрипт, который запускает автоматический поиск на сайте MakeUseOf. После освоения базового примера вы можете развивать проект: добавлять настройки, локализацию, обработку ошибок, периодические задания и публичную публикацию в Chrome Web Store.

Ключевые вещи для дальнейшей работы: внимательно настраивайте host_permissions, минимизируйте запрашиваемые права и тестируйте расширение на целевых страницах.

Summary:

  • Расширения дают гибкость и возможности для автоматизации браузера.
  • Собранный пример демонстрирует, как вставлять код в страницу и управлять DOM.
  • Следуйте рекомендациям по безопасности и тестированию перед публикацией.

Notes: помните, что расширение будет работать только на сайтах с ожидаемой структурой DOM. Если сайт изменится, потребуется обновить селекторы и, возможно, логику взаимодействия.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Photo Shuffle на iPhone: настройка и советы
Mobile

Photo Shuffle на iPhone: настройка и советы

Как убрать исполнителя и трек из Deezer
Руководство

Как убрать исполнителя и трек из Deezer

Остановить автоустановку приложений на Samsung
Android.

Остановить автоустановку приложений на Samsung

Изменить значок папки в Linux
Linux

Изменить значок папки в Linux

Кроссфейд аудио в Premiere Pro
Видео

Кроссфейд аудио в Premiere Pro

Как создать и продавать пресеты Lightroom
Фотография

Как создать и продавать пресеты Lightroom