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 минут):
-
permissions.request()
-
desktopCapture.chooseDesktopMedia()
-
identity.launchWebAuthFlow()
-
management.uninstall()
Запись аудио и видео в фоновом режиме
Закрыт еще один пробел между 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. Посетите нашу страницу известных проблем , чтобы узнать текущий статус.