Einführung
In Standard-Chrome-Erweiterungen können Servicemitarbeiter nicht sein persistent gemacht, was eine Herausforderung für Szenarien darstellt, in denen das Abfangen von Daten oder die Aufrechterhaltung des Zustands über lange Zeiträume von entscheidender Bedeutung ist. In diesem Artikel werden verschiedene Methoden zur Überwindung dieser Einschränkung untersucht.
Bug Exploit (Chrome 110)
Chrome 110 weist einen Fehler auf, der es Servicemitarbeitern ermöglicht um 30 Sekunden länger aktiv zu bleiben, indem Sie ein beliebiges asynchrones Chrome aufrufen API.
// background.js const keepAlive = (i => state => { if (state && !i) { if (performance.now() > 20e3) chrome.runtime.getPlatformInfo(); i = setInterval(chrome.runtime.getPlatformInfo, 20e3); } else if (!state && i) { clearInterval(i); i = 0; } })(); async function doSomething() { try { keepAlive(true); const res = await (await fetch('........')).text(); // ........... } catch (err) { // .......... } finally { keepAlive(false); } }
Offscreen-API (Chrome 109)
Diese API ermöglicht das Erstellen von Offscreen-Dokumenten, die alle 30 Sekunden Nachrichten senden, um den Servicemitarbeiter aktiv zu halten.
background.js:
async function createOffscreen() { await chrome.offscreen.createDocument({ url: 'offscreen.html', reasons: ['BLOBS'], justification: 'keep service worker running' }).catch(() => {}); } chrome.runtime.onStartup.addListener(createOffscreen); createOffscreen();
NativeMessaging API (Chrome 105)
Herstellen einer Verbindung zu einem nativeMessaging host über chrome.runtime.connectNative hält den Service-Worker so lange am Laufen, wie die Verbindung besteht aktiv.
// background.js const connect = () => { chrome.runtime.connectNative('nativemessaging_host').onDisconnect.addListener(connect); }; connect(); // Start the connection on startup
WebSocket-API (Chrome 116)
Der Austausch von WebSocket-Nachrichten weniger als alle 30 Sekunden hält den Servicemitarbeiter aktiv.
Spezieller Tab
Öffnen Sie einen speziellen Tab mit einem Erweiterungsseite, die als dauerhafte Hintergrundseite dient.
Das obige ist der detaillierte Inhalt vonWie halte ich den Service Worker einer Chrome-Erweiterung dauerhaft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!