Maison > interface Web > js tutoriel > Comment garder le Service Worker d'une extension Chrome persistant ?

Comment garder le Service Worker d'une extension Chrome persistant ?

Linda Hamilton
Libérer: 2024-12-10 11:21:12
original
705 Les gens l'ont consulté

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

Comment conserver un Service Worker dans une extension Chrome

Introduction

Dans les extensions Chrome standard, les service Workers ne peuvent pas être rendu persistant, ce qui pose des défis pour les scénarios où l'interception des données ou le maintien de l'état sur de longues périodes est crucial. Cet article explore différentes méthodes pour surmonter cette limitation.

Solutions de contournement

Exploitation de bug (Chrome 110)

Chrome 110 présente un bug qui permet aux techniciens de service rester actif pendant 30 secondes de plus en invoquant n'importe quel Chrome asynchrone 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);
  }
}
Copier après la connexion

API hors écran (Chrome 109)

Cette API permet de créer des documents hors écran qui envoient des messages toutes les 30 secondes pour garder le technicien de service actif.

  • Manifest.json : "permissions": ["hors écran"]
  • offscreen.html :
  • offscreen.js : setInterval(() => (attendre 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();
    Copier après la connexion

API NativeMessaging (Chrome 105)

Connexion à un message natif l'hôte via chrome.runtime.connectNative maintient le service worker en cours d'exécution tant que la connexion est actif.

// background.js
const connect = () => {
  chrome.runtime.connectNative('nativemessaging_host').onDisconnect.addListener(connect);
};

connect(); // Start the connection on startup
Copier après la connexion

API WebSocket (Chrome 116)

L'échange de messages WebSocket moins de toutes les 30 secondes maintient le technicien de service actif.

Onglet dédié

Ouvrez un onglet dédié avec une extension page qui sert de page d'arrière-plan persistante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal