Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

161
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!