Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

162
Vistas
¿Cómo refactorizar variables globales de MV2 para usar chrome.storage en MV3 service worker?

Para eliminar las variables globales utilizadas en un script de fondo de MV2 al migrar a un trabajador de servicio de MV3, todas las guías que he encontrado solo dan un ejemplo de cómo reemplazar una única variable global con unas pocas líneas de configuración y luego usar chrome.storage , pero todavía no me queda claro cómo se puede usar en un escenario un poco más complicado.

Por ejemplo:

 const activatedTabs = []; let lastActiveTabInfo; chrome.tabs.onActivated.addListener((activeInfo) => { if (activatedTabs.length === 0) { activatedTabs.push(activeInfo.tabId); lastActiveTabInfo = activeInfo; } }

¿Cómo podría refactorizarse el fragmento anterior para usar chrome.storage y eliminar las variables globales?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El número de variables en el estado no cambia el enfoque:

  1. leer el estado al inicio del script
  2. guardar el estado en el cambio

Para datos pequeños (1 MB en total), use chrome.storage.session, que está en la memoria, es decir, no escribe en el disco; de lo contrario, use chrome.storage.local. Ambos solo pueden almacenar tipos compatibles con JSON, es decir, cadena, número, booleano, nulo, matrices/objetos de dichos tipos. También hay IndexedDB para Blob o Uint8Array.

 let activatedTabs; let lastActiveTabInfo; let busy = chrome.storage.session.get().then(data => { activatedTabs = data.activatedTabs || []; lastActiveTabInfo = data.lastActiveTabInfo; busy = null; }); const saveState = () => chrome.storage.session.set({ activatedTabs, lastActiveTabInfo, }); chrome.tabs.onActivated.addListener(async info => { if (!activatedTabs.length) { if (busy) await busy; activatedTabs.push(info.tabId); lastActiveTabInfo = info; await saveState(); } });

También puede mantener un solo objeto con propiedades en su lugar:

 const state = { activatedTabs: [], lastActiveTabInfo: null, }; const saveState = () => chrome.storage.session.set({ state }); let busy = chrome.storage.session.get('state').then(data => { Object.assign(state, data.state); busy = null; }); chrome.tabs.onActivated.addListener(async info => { if (!state.activatedTabs.length) { if (busy) await busy; state.activatedTabs.push(info.tabId); state.lastActiveTabInfo = info; await saveState(); } });

Tenga en cuenta que si se suscribe a eventos frecuentes como tabs.onActivated, su trabajador de servicio puede reiniciarse cientos de veces al día, lo que desperdicia muchos más recursos que mantener una página de fondo persistente inactiva. El equipo de Chromium ignora este problema, pero tú no deberías y, afortunadamente, hay una manera de reducir la cantidad de reinicios al prolongar la vida útil del software . Todavía necesita leer/guardar el estado como se muestra.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda