Estamos en proceso de actualizar muchas extensiones de Chrome a la versión 3 de Manifest. Muchas de ellas tienen un script de fondo que usa localStorage que no está disponible en Service Worker. Sé que las API de chrome.storage o IndexedDB son un reemplazo válido, pero son asíncronas y se necesitaría mucho esfuerzo para que algunas extensiones se cambien a asíncronas. Entonces mi problema puede ser resuelto por:
Encuentre una API de almacenamiento que NO sea async y que no conozco.
Pregunta: Encuentre un patrón que pueda actualizar de manera rápida y confiable el código sincrónico en muchos lugares a asincrónico.
Creo que el segundo intento es el más sensato. Sin embargo, muchos lugares tienen métodos como este (solo un ejemplo) que hace que la actualización sea difícil y también propensa a errores debido a la falta de Promise / await .
// Background localStorage["key"] = true; if (localStorage["key2"]) { // Do stuff } // Foreground/Popup/Content Script if (localStorage["key"]) { /* Do Something */ } if (localStorage["key2"]) { /* Do Something Else */ } localStorage["key3"] = "My Value";Hay algunas extensiones agradables con este código, que son fáciles de actualizar:
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { if (request.method == "getLocalStorage") { sendResponse({ data: localStorage[request.key] }); } }); Lo cual simplemente necesito cambiar el controlador de mensajes a async ya que el extremo receptor ya está basado en devolución de llamada. Desafortunadamente, cada extensión es muy diferente y no existe una forma estándar de hacerlo.