Chrome 116 jest już dostępna w wersji beta i zawiera wiele ekscytujących nowości dla deweloperów rozszerzeń do Chrome. Spójrzmy, co się zmieniło.
Otwieranie panelu bocznego za pomocą kodu
Panel boczny to jedna z najbardziej pożądanych funkcji rozszerzeń do Chrome. Jest dostępny w Chrome od wersji 114. Po udostępnieniu interfejsu Side Panel API otrzymaliśmy od deweloperów informację, że chcieliby mieć możliwość otwierania panelu bocznego za pomocą kodu. Oto ona: chrome.sidePanel.open
jest już dostępna w wersji beta. Możesz go użyć do otwarcia panelu bocznego rozszerzenia w ramach programu w reakcji na działanie użytkownika, np. kliknięcie menu kontekstowego:
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 });
}
});
Obsługa WebSocket w usługach działających w tle
Obsługa WebSocket jest kluczowa dla wielu rozszerzeń, które planują przejście na Manifest V3. Chrome 116 jeszcze bardziej ulepsza obsługę WebSocket w workerach usług, ponieważ cała aktywność WebSocket będzie resetować 30-sekundowy licznik czasu bezczynności workera usługi. Oznacza to, że dopóki protokół WebSocket jest aktywny, usługa workera będzie aktywna.
Możesz użyć tego do zaimplementowania mechanizmu keepalive, który zapewni, że usługa workera pozostanie aktywna, gdy oczekujesz na wiadomości od serwera, nawet jeśli dotarcie kolejnej wiadomości zajmie więcej niż 30 sekund:
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
);
}
Więcej informacji znajdziesz w nowym przewodniku i pliku przykładowym WebSocket.
Silne utrzymywanie połączenia w przypadku skryptów service worker
Na temat cyklu życia usług workera pojawiła się kolejna ważna aktualizacja: silne utrzymywanie połączenia w przypadku interfejsów API wymagających interakcji z użytkownikiem. Interfejsy API, które wymagają interakcji z użytkownikiem, będą miały „silne” mechanizmy utrzymywania połączenia dla pracowników usługi rozszerzenia (czyli pozwolą pracownikowi na wykonanie zadania w czasie dłuższym niż 5 minut):
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
Nagrywanie dźwięku i obrazu w tle
Kolejna luka między platformami Manifest V2 i Manifest V3 została załatana: możesz nagrywać dźwięk i obraz w tle, korzystając z dokumentów tabCapture
i poza ekranem. Użyj interfejsu API chrome.tabCapture
w usługach workera, aby uzyskać identyfikator strumienia po wykonaniu przez użytkownika odpowiedniej czynności. Następnie można przekazać go do dokumentu poza ekranem, aby rozpocząć nagrywanie.
Aby dowiedzieć się, jak działa ta funkcja, zapoznaj się z aktualizowanym przewodnikiem tabCapture
lub obejrzyj przykład Tab Capture – Recorder.
Nowe interfejsy API: runtime.getContexts()
Nowy interfejs API runtime.getContexts()
umożliwia pobieranie informacji o aktywnych kontekstach powiązanych z Twoimi rozszerzeniami. Możesz na przykład sprawdzić, czy aktywny jest dokument poza ekranem:
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT'
);
Nowy powód poza ekranem: GEOLOCATION
geolocation
został dodany jako kolejny uzasadniony powód użycia dokumentu poza ekranem. Aby dowiedzieć się więcej o tym, jak uzyskać położenie geograficzne rozszerzenia za pomocą interfejsu Offscreen API, zapoznaj się z naszym przewodnikiem Korzystanie z geolokalizacji.
chrome.action.setBadgeText()
action.setBadgeText
został zaktualizowany, aby rozwiązać problem niespójności między Manifestem V2 a Manifestem V3. Przekazanie pustego ciągu lub wartości null
do funkcji action.setBadgeText
spowoduje wyczyszczenie tekstu plakietki na wskazanej karcie i ustawienie domyślnego tekstu plakietki.
action.setBadgeText({tabId: tabId, text: ''});
Podsumowanie: kolejny krok w kierunku Manifestu V3
Dzięki ulepszonej obsłudze czasu życia Service Workera i zaktualizowanemu interfejsowi TabCapture API udało nam się poczynić postępy w realizacji naszego celu, którym jest zmniejszenie różnicy w funkcjonalności między Manifestem V2 a V3. Aby sprawdzić aktualny stan, odwiedź stronę znanych problemów.