Heim > Web-Frontend > js-Tutorial > Wie halte ich den Service Worker einer Chrome-Erweiterung dauerhaft?

Wie halte ich den Service Worker einer Chrome-Erweiterung dauerhaft?

Linda Hamilton
Freigeben: 2024-12-10 11:21:12
Original
673 Leute haben es durchsucht

How to Keep a Chrome Extension's Service Worker Persistent?

So behalten Sie einen Servicemitarbeiter in einer Chrome-Erweiterung bei

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.

Problemumgehungen

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);
  }
}
Nach dem Login kopieren

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.

  • Manifest.json: „permissions“: [„offscreen“]
  • offscreen.html:
  • offscreen.js: setInterval(() => (await navigator.serviceWorker.ready).active.postMessage('keepAlive'), 20e3);
  • 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();
    Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage