Extensión de Chrome: el contexto de la extensión se invalida al obtener la URL
Estoy recuperando algunas imágenes de una de mis carpetas de extensiones de Chrome en el DOM del sitio web y cada vez que recargo la extensión, aparece un error de "Contexto de extensión invalidado". Lo mismo sucede cuando hago un 'chrome.storage.local.set'.
Al investigar un poco, me di cuenta de que este error tiene que ver con los hechos bien explicados en esta respuesta, pero como no estoy enviando mensajes entre mi script de contenido y background.js, me pregunto por qué sucede esto.
Esta es la parte de mi script (inyectado a través de chrome.tabs.executeScript en el popup.js) donde aparece el error, básicamente estoy inyectando imágenes de una de mis carpetas de extensión en el sitio web DOM:
for (let k = 0; k < incomingChatTags.length; k++) {
let normalHolderTag = $(incomingChatTags[k]).text().toLowerCase(); switch (normalHolderTag) { case "vip": $(incomingChatTags[k]).addClass("ce-vip");
priorityVal += 300;
break;
case "rg":
$(incomingChatTags[k]).addClass("ce-rg"); priorityVal += 240; break; case "accountclosure": $(incomingChatTags[k]).addClass("ce-accountclosure");
priorityVal += 200;
break;
case "21com":
let logo21 = chrome.extension.getURL("/images/21_thumb.png");
$(incomingChatTags[k]).html('<img src="' + logo21 + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "caxino":
//the console shows the error here and not before....¿why?
let logoCaxino = chrome.extension.getURL(
"/images/caxino_thumb.png"
);
$(incomingChatTags[k]).html('<img src="' + logoCaxino + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "justspin":
let logoJustSpin = chrome.extension.getURL(
"/images/wildz_thumb.png"
);
$(incomingChatTags[k]).html('<img src="' + logoJustSpin + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "neonvegas":
let logoNeonVegas = chrome.extension.getURL(
"/images/neonVegas_thumb.jpg"
);
$(incomingChatTags[k]).html('<img src="' + logoNeonVegas + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "nitrocasino":
let logoNitroCasino = chrome.extension.getURL(
"/images/nitroCasino_thumb.jpg"
);
$(incomingChatTags[k]).html( '<img src="' + logoNitroCasino + '" />' ); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "snabbis":
let logoSnabbis = chrome.extension.getURL(
"/images/snabbis_thumb.png"
);
$(incomingChatTags[k]).html('<img src="' + logoSnabbis + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "sb.bet":
let logoSB = chrome.extension.getURL("/images/sb_thumb.png");
$(incomingChatTags[k]).html('<img src="' + logoSB + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "wildz":
let logoWildz = chrome.extension.getURL("/images/wildz_thumb.png");
$(incomingChatTags[k]).html('<img src="' + logoWildz + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
case "wishmaker":
let logoWishMaker = chrome.extension.getURL(
"/images/wishmaker_thumb.png"
);
$(incomingChatTags[k]).html('<img src="' + logoWishMaker + '" />'); $(incomingChatTags[k]).addClass("ce-tag-logo");
break;
}
$(incomingChat).attr("data-priority", priorityVal); $(incomingChat).find(".numbers_cell").text(priorityVal);
}
Respuestas
Quiero explicar lo que hice para mantener esto:
Básicamente envuelvo todo lo que estaba creando este error con:
typeof chrome.app.isInstalled !== "undefined"”
Sigo tratando de averiguar por qué funciona esto, para ser honesto. Entiendo que cada vez que actualizo la extensión, los scripts de contenido todavía se inyectan en el sitio web (en mi caso, tomando elementos dom, almacenando datos en el almacenamiento local de Chrome, etc.) pero no entiendo por qué esa declaración evita que esto suceda ya que la extensión todavía está instalada en mi navegador, solo estoy actualizando los archivos.
Si alguien puede dar una explicación más detallada de por qué esto funciona para mí, por favor ilumine aquí.
Al volver a cargar la extensión, sus antiguos scripts de contenido seguirán residiendo en las páginas abiertas hasta que las actualice. Sin embargo, su contexto con respecto a la extensión de Chrome se perdería.
Solo un trazador de líneas para evitar la situación:
if(chrome.runtime.id == undefined) return;