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.
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); } }
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.
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();
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
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!