Расширение Boss Alert для Chrome: Manifest V3, мгновенный режим паники и зачистка истории за 5 минут

от автора

Введение

Знакомая ситуация: вы на пару минут отвлеклись от кода, чтобы проверить личную почту или почитать мемы, и в этот момент за спиной бесшумно материализуется начальник. Судорожные попытки закрыть вкладку мышкой или переключиться по Alt+Tab на IDE часто выглядят подозрительно — секундное замешательство выдает вас с головой.

Я решил автоматизировать защиту своего офисного пространства и написал Boss Alert — ультралегкое (всего 26 Кб) Chrome-расширение под Manifest V3. По нажатию хоткея оно мгновенно сворачивает «неуставные» вкладки, подменяет экран нейтральной рабочей страницей, а после ухода босса — восстанавливает сессию обратно. В этой статье я покажу изнутри, как устроен этот «режим паники» и почему расширению можно доверять (разбор манифеста и логики приватности).

Архитектура «Режима паники»

Главная проблема аналогов — они либо просто закрывают браузер (теряя сессию), либо прячут окна, оставляя пустой рабочий стол. Boss Alert работает по принципу двухпозиционного триггера togglePanicMode():

  1. Вход в панику: Сохраняются URL всех открытых вкладок без их содержимого. Открывается новая вкладка с нейтральным сайтом (Google, Википедия или кастомный URL).

  2. Выход из паники: Все сохраненные вкладки возвращаются на свои места.

Вот как выглядит ключевая логика переключения в 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/