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

Chrome 116 уже доступен в бета-версии и включает множество интересных обновлений для разработчиков расширений 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 активен, сервис-воркер будет работать.

Вы можете использовать это для реализации механизма keepalive, гарантирующего, что ваш service worker останется активным, пока вы ждете сообщений от сервера — даже если до прибытия следующего сообщения пройдет более 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 добавлена в качестве ещё одной веской причины использования документа, не относящегося к экрану . Ознакомьтесь с нашим руководством по использованию геолокации, чтобы узнать больше о том, как получить данные о географическом местоположении расширения с помощью API, не относящегося к экрану.

chrome.action.setBadgeText()

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

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

Резюме: еще один шаг к Manifest V3

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