Техническая документация

Документация
для разработчиков

Всё необходимое для установки, настройки и расширения OKX — от быстрого старта до продвинутой конфигурации.

Быстрый старт

Запуск за 60 секунд

Требования

  • Google Chrome 109+ или браузер на базе Chromium
  • Включён «Режим разработчика» в chrome://extensions
  • Никаких дополнительных инструментов или рантаймов не требуется

Шаги установки

  1. Скачайте и распакуйте okx-v1.0.0.zip
  2. Перейдите по адресу chrome://extensions/
  3. Включите Режим разработчика (правый верхний угол)
  4. Нажмите «Загрузить распакованное расширение»
  5. Выберите распакованную папку okx/
  6. Нажмите значок приложения на панели браузера — готово.
manifest.json
{
  "manifest_version": 3,
  "name": "OKX",
  "version": "1.0.0",
  "description": "Инструмент для повышения
    производительности браузера",
  "permissions": [
    "tabs",
    "storage",
    "browsingData"
  ],
  "action": {
    "default_popup": "popup.html"
  },
  "background": {
    "service_worker": "background.js"
  }
}
Архитектура

Устройство изнутри

OKX следует архитектуре Manifest V3 со строгим разделением UI-слоя, сервисного воркера и контент-скрипта.

🖼️

popup.html / popup.js

Панель управления. Все нажатия кнопок отправляют сообщения в фоновый сервисный воркер через chrome.runtime.sendMessage(). Панель никогда не обращается к API браузера напрямую.

Ширина 310pxБез внешних ресурсов
⚙️

background.js (Сервисный воркер)

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

MV3 SWchrome.tabs APIbrowsingData
📄

content.js

Минимальный контент-скрипт, внедряемый в страницы для будущей расширяемости. Сейчас отвечает только на ping-сообщения. Не собирает никаких данных страницы.

МинимальныйБез доступа к DOM
Поток сообщений: панель → воркер → API
// popup.js — пользователь нажимает «Оптимизировать память»
chrome.runtime.sendMessage({ action: 'optimizeMemory' }, response => {
  console.log(`Заморожено вкладок: ${response.discarded}`);
});

// background.js — обработка сообщения
chrome.runtime.onMessage.addListener((msg, _sender, reply) => {
  if (msg.action === 'optimizeMemory') {
    optimizeMemory().then(reply);
    return true; // канал открыт для асинхронного ответа
  }
});

// background.js — реализация
async function optimizeMemory() {
  const tabs = await chrome.tabs.query({ active: false });
  let n = 0;
  for (const t of tabs)
    if (!t.pinned) { await chrome.tabs.discard(t.id); n++; }
  return { success: true, discarded: n };
}
Справочник API

Внутренние действия-сообщения

Фоновый сервисный воркер принимает следующие действия от панели управления или любой страницы приложения.

ДействиеОписаниеПоля ответаНеобходимые разрешения
'clearCache' Очищает дисковый кэш через browsingData.removeCache() { success, clearedAt } browsingData
'optimizeMemory' Замораживает все неактивные незакреплённые вкладки для освобождения RAM { success, discarded } tabs
'suspendTabs' Замораживает все неактивные вкладки вне зависимости от их текущего состояния { suspended } tabs
'ping' Проверка работоспособности из контент-скрипта или DevTools { alive: true }
Настройка

Форкните и сделайте своим

Изменение порога заморозки

По умолчанию менеджер вкладок целится во все неактивные вкладки. Чтобы добавить фильтр по времени (замораживать только вкладки, неактивные 30+ минут), измените background.js:

background.js — фильтр по времени
const IDLE_MS = 30 * 60 * 1000; // 30 минут

async function suspendOld() {
  const tabs = await chrome.tabs.query({});
  const now = Date.now();
  for (const t of tabs) {
    if (!t.active && !t.pinned &&
        now - t.lastAccessed > IDLE_MS) {
      await chrome.tabs.discard(t.id);
    }
  }
}

Добавление нового действия

Архитектура передачи сообщений делает добавление новых возможностей тривиальным. Зарегистрируйте обработчик в background.js, добавьте кнопку в popup.html и подключите её в popup.js:

background.js — новое действие
// Добавьте в слушатель сообщений:
if (msg.action === 'myAction') {
  myAction().then(reply);
  return true;
}

async function myAction() {
  // Ваша реализация здесь
  return { success: true };
}
Разрешения

Зачем запрашивается каждое разрешение

tabs

Управление вкладками

Требуется для запроса списка открытых вкладок через chrome.tabs.query() и вызова chrome.tabs.discard() в менеджере вкладок и оптимизаторе памяти.

storage

Локальное хранилище

Зарезервировано для будущего сохранения настроек (например, порог неактивности). В текущей версии не используется — данные хранятся только в памяти.

browsingData

Очистка кэша

Требуется исключительно для очистителя кэша. Без этого разрешения вызов chrome.browsingData.removeCache() выдаёт ошибку.

Ни одно из этих разрешений не предоставляет доступ к содержимому страниц, данным форм, паролям или истории браузера. Проверить это можно в панели аудита расширений Chrome или прочитав manifest.json.