Всё необходимое для установки, настройки и расширения OKX — от быстрого старта до продвинутой конфигурации.
okx-v1.0.0.zipchrome://extensions/okx/{
"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-слоя, сервисного воркера и контент-скрипта.
Панель управления. Все нажатия кнопок отправляют сообщения в фоновый сервисный воркер через chrome.runtime.sendMessage(). Панель никогда не обращается к API браузера напрямую.
Постоянный сервисный воркер обрабатывает все привилегированные операции: запросы вкладок, очистку кэша и заморозку. Регистрирует слушатель сообщений и маршрутизирует действия к нужным асинхронным функциям.
Минимальный контент-скрипт, внедряемый в страницы для будущей расширяемости. Сейчас отвечает только на ping-сообщения. Не собирает никаких данных страницы.
// 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 }; }
Фоновый сервисный воркер принимает следующие действия от панели управления или любой страницы приложения.
| Действие | Описание | Поля ответа | Необходимые разрешения |
|---|---|---|---|
'clearCache' |
Очищает дисковый кэш через browsingData.removeCache() |
{ success, clearedAt } |
browsingData |
'optimizeMemory' |
Замораживает все неактивные незакреплённые вкладки для освобождения RAM | { success, discarded } |
tabs |
'suspendTabs' |
Замораживает все неактивные вкладки вне зависимости от их текущего состояния | { suspended } |
tabs |
'ping' |
Проверка работоспособности из контент-скрипта или DevTools | { alive: true } |
— |
По умолчанию менеджер вкладок целится во все неактивные вкладки. Чтобы добавить фильтр по времени (замораживать только вкладки, неактивные 30+ минут), измените 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:
// Добавьте в слушатель сообщений: if (msg.action === 'myAction') { myAction().then(reply); return true; } async function myAction() { // Ваша реализация здесь return { success: true }; }
Требуется для запроса списка открытых вкладок через chrome.tabs.query() и вызова chrome.tabs.discard() в менеджере вкладок и оптимизаторе памяти.
Зарезервировано для будущего сохранения настроек (например, порог неактивности). В текущей версии не используется — данные хранятся только в памяти.
Требуется исключительно для очистителя кэша. Без этого разрешения вызов chrome.browsingData.removeCache() выдаёт ошибку.
manifest.json.