Realmente estoy luchando con esto: lo que estoy tratando de hacer es crear una matriz que se almacena en chrome.sync con la URL de las páginas únicas que visita un usuario. Agregar la url a la matriz funciona bien; lo que me cuesta es cómo verificar si esa url ya existe en la matriz. Esto es lo que tengo actualmente:
function getURL(array) { chrome.tabs.query({active: true, lastFocusedWindow: true, currentWindow: true}, tabs => { let tabUrl = tabs[0].url; addArr(tabUrl, array); }); } function addArr(tabUrl, array) { array.map((x) => { let urlCheck = x.url; console.log(urlCheck); if(urlCheck != tabUrl) { array.push(tabUrl); chrome.storage.sync.set({data: array}, function() { console.log("added") }); } }) }Lo molesto que no puedo resolver es que funciona cuando elimino cualquier cosa que tenga que ver con el mapa y solo conservo:
array.push(tabUrl); chrome.storage.sync.set({data: array}, function() { console.log("added") });Esto tiene aún menos sentido porque cuando inspecciono la matriz al inspeccionar la ventana emergente y luego mirar la consola, no hay ningún error, solo una matriz de datos vacía. Sin embargo, el error que me da cuando inspecciono la ventana emergente (en realidad, haga clic con el botón derecho en la extensión) es
Respuesta de manejo de errores: TypeError: no se pueden leer las propiedades de undefined (leyendo 'url') en chrome-extension://jkhpfndgmiimdbmjbajgdnmgembbkmgf/getURL.js:31:30
¿Esa línea 31 de getURL.js? Eso es parte del código que obtiene la pestaña activa. es decir
let tabUrl = tabs[0].url;que ni siquiera está en la misma función.
¿Algunas ideas? Estoy totalmente perplejo.
El uso includes el método:
function addArr(tabUrl, array) { if (!array.includes(tabUrl)) { array.push(tabUrl); chrome.storage.sync.set({data: array}); } } Sin embargo, chrome.storage.sync tiene un límite de 8192 bytes para cada valor que solo puede contener un promedio de 100 URL, por lo que tendrá que limitar la cantidad de elementos en la matriz, por ejemplo, usando array.splice o usando varios claves en el almacenamiento o use chrome.storage.local . También hay otros límites en el almacenamiento sync , como la frecuencia de las operaciones de escritura, que puede superar fácilmente si el usuario navega mucho. Una solución aún mejor es usar IndexedDB con cada URL como una clave separada para que no tenga que volver a escribir la matriz completa cada vez.