Что нового в Chrome 116 для расширений

Chrome 116 теперь доступен в бета-версии и включает в себя множество интересных обновлений для разработчиков расширений Chrome. Давайте кратко рассмотрим, что нового.

Себастьян Бенц
Себастьян Бенц

Программно открыть боковую панель

Боковая панель была одной из наиболее востребованных функций в расширениях Chrome и доступна в Chrome начиная с версии 114. После запуска API боковой панели одним из первых полученных нами отзывов было то, что разработчикам нужен способ программного открытия боковая панель. И вот оно: chrome.sidePanel.open сейчас находится в стадии бета-тестирования. Вы можете использовать его для программного открытия боковой панели расширения в ответ на взаимодействие с пользователем, например щелчок в контекстном меню:

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === 'openSidePanel') {
    // This will open the panel in all the pages on the current window.
    chrome.sidePanel.open({ windowId: tab.windowId });
  }
});

Поддержка WebSocket в Service Workers

Поддержка WebSocket имеет решающее значение для многих расширений, планирующих перейти на Manifest V3. В Chrome 116 еще больше улучшена поддержка WebSocket в сервис-воркерах, поскольку все действия WebSocket будут сбрасывать таймер простоя сервис-воркера, равный 30 секундам . Это означает, что пока ваш WebSocket активен, сервис-воркер будет оставаться в живых.

Вы можете использовать это для реализации механизма поддержки активности, гарантирующего, что ваш сервисный работник остается активным, пока вы ожидаете сообщений от вашего сервера - даже если до прибытия следующего сообщения требуется более 30 секунд:

function keepAlive() {
  const keepAliveIntervalId = setInterval(
    () => {
      if (webSocket) {
        webSocket.send('keepalive');
      } else {
        clearInterval(keepAliveIntervalId);
      }
    },
    // It's important to pick an interval that's shorter than 30s, to
    // avoid that the service worker becomes inactive.
    20 * 1000
  );
}

Для получения более подробной информации ознакомьтесь с нашим новым руководством и примером по WebSocket.

Надежная поддержка активности для сервисных работников

Говоря о жизненном цикле сервис-воркера, появилось еще одно важное обновление: надежная поддержка активности для API, требующих взаимодействия с пользователем. API, требующие взаимодействия с пользователем, будут иметь «сильные» проверки активности для работников служб расширений (т. е. позволят работнику выполнять эту задачу дольше 5 минут):

Запись аудио и видео в фоновом режиме

Закрыт еще один пробел между Manifest V2 и Manifest V3: вы можете записывать аудио и видео в фоновом режиме с помощью tabCapture и закадровых документов. Используйте API chrome.tabCapture в сервис-воркере, чтобы получить идентификатор потока после жеста пользователя. Затем его можно передать в закадровый документ , чтобы начать запись.

Ознакомьтесь с нашим обновленным руководством tabCapture , чтобы узнать, как оно работает, или, в качестве рабочего примера, посмотрите образец Tab Capture — Recorder .

Новый API: runtime.getContexts().

Новый API runtime.getContexts() позволяет получать информацию об активных контекстах, связанных с вашими расширениями. Например, вы можете использовать его, чтобы проверить, есть ли активный закадровый документ:

const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
    (c) => c.contextType === 'OFFSCREEN_DOCUMENT'
  );

Новая закадровая причина: ГЕОЛОКАЦИЯ

geolocation была добавлена ​​как еще одна веская причина для использования закадрового документа . Ознакомьтесь с нашим руководством по использованию геолокации , чтобы узнать больше о том, как получить географическое местоположение расширения с помощью Offscreen API.

chrome.action.setBadgeText()

action.setBadgeText был обновлен для устранения несоответствия между Manifest V2 и Manifest V3. Передача пустой строки или null в action.setBadgeText приведет к очистке текста значка для указанной вкладки и вместо этого по умолчанию будет использоваться глобальный текст значка.

action.setBadgeText({tabId: tabId, text: ''});

Резюме: еще один шаг к Манифесту V3

Благодаря улучшенной пожизненной поддержке Service Worker и обновленному API TabCapture мы продолжили добиваться прогресса в достижении нашей цели — устранить разрыв в функциях между Manifest V2 и V3. Посетите нашу страницу известных проблем , чтобы узнать текущий статус.