Введение
Знакомая ситуация: вы на пару минут отвлеклись от кода, чтобы проверить личную почту или почитать мемы, и в этот момент за спиной бесшумно материализуется начальник. Судорожные попытки закрыть вкладку мышкой или переключиться по Alt+Tab на IDE часто выглядят подозрительно — секундное замешательство выдает вас с головой.
Я решил автоматизировать защиту своего офисного пространства и написал Boss Alert — ультралегкое (всего 26 Кб) Chrome-расширение под Manifest V3. По нажатию хоткея оно мгновенно сворачивает «неуставные» вкладки, подменяет экран нейтральной рабочей страницей, а после ухода босса — восстанавливает сессию обратно. В этой статье я покажу изнутри, как устроен этот «режим паники» и почему расширению можно доверять (разбор манифеста и логики приватности).
Архитектура «Режима паники»
Главная проблема аналогов — они либо просто закрывают браузер (теряя сессию), либо прячут окна, оставляя пустой рабочий стол. Boss Alert работает по принципу двухпозиционного триггера togglePanicMode():
-
Вход в панику: Сохраняются URL всех открытых вкладок без их содержимого. Открывается новая вкладка с нейтральным сайтом (Google, Википедия или кастомный URL).
-
Выход из паники: Все сохраненные вкладки возвращаются на свои места.
Вот как выглядит ключевая логика переключения в background.js:
function togglePanicMode() { isPanicMode = !isPanicMode; if (isPanicMode) { // Вход в панику saveCurrentTabs(); // Сохраняет URL всех вкладок без содержимого openNeutralTab(); // Открывает новую вкладку с нейтральной страницей (Google/Wikipedia/Custom) } else { // Выход из паники restoreTabs(); // Восстанавливает сохранённые вкладки }}
Разрешения и паранойя: почему расширение безопасно?
Пользователи часто боятся ставить NoName-расширения, так как они могут шпионить за трафиком или воровать сессии. При проектировании Boss Alert я минимизировал манифест, чтобы отсечь любые подозрения.
В manifest.json запрашиваются только локальные сущности:
"permissions": [ "tabs", "activeTab", "storage", "history"]
-
tabsиactiveTab— нужны исключительно для получения списка открытых объектов{id, url, windowId, index}для их последующего восстановления. Код не лезет внутрь страниц черезchrome.tabs.sendMessage()и не читает их контент. -
storage— локальное сохранение состояния паники и настроек. -
history— используется для киллер-фичи (зачистки следов).
Важно: Расширение не запрашивает доступ к данным страниц (webRequest), файловой системе или контент-скриптам. В коде полностью отсутствуют методы сетевого обмена (fetch, XMLHttpRequest), поэтому данные физически не могут уйти на внешние серверы. Всё работает строго локально.
Киллер-фича: Заметаем следы в истории
Бывает, что босс не просто подошел посмотреть, а просит: «Покажи-ка историю браузера за последние пару минут, что ты там открывал?». Для этого случая в расширение встроена функция clearRecentHistory():
function clearRecentHistory() { if (!currentSettings.clearHistory) return; // Если опция отключена пользователем chrome.history.search({ startTime, endTime }, (historyItems) => { historyItems.forEach(item => { chrome.history.deleteUrl({ url: item.url }); }); });}
Если опция включена пользователем в настройках, расширение при активации режима паники автоматически стирает историю посещений за последние 5 минут. Массив historyItems используется только локально внутри итератора для удаления и тут же уничтожается.
Итоги
Благодаря отказу от UI-фреймворков и чистому JS, расширение весит 26 Кб и отрабатывает триггер мгновенно. По умолчанию в сторе зашит хоткей Ctrl+Shift+B (его также можно кастомизировать в настройках браузера).
Код закрыт, так как здесь нет сложной серверной бизнес-логики, но вся механика абсолютно прозрачна и безопасна, что подтверждено проверкой Chrome Web Store.
Расширение доступно бесплатно по ссылке: [https://chromewebstore.google.com/detail/boss-alert/dhchaehmjcalfcmiaehgcplallpipjhn?utm_source=ext_app_menu]
ссылка на оригинал статьи https://habr.com/ru/articles/1058996/