Estensione Chrome: contesto dell'estensione invalidato durante il recupero dell'URL
Sto recuperando alcune immagini da una delle mie cartelle di estensioni di Chrome al DOM del sito Web e ogni volta che ricarico l'estensione ricevo un errore "Contesto estensione non convalidato". La stessa cosa accade quando eseguo un "chrome.storage.local.set".
Facendo qualche ricerca mi sono reso conto che questo errore ha a che fare con i fatti ben spiegati in questa risposta, ma poiché non sto messaggiando tra il mio script di contenuto e background.js mi chiedo perché ciò accada.
Questa è la parte del mio script (iniettato tramite chrome.tabs.executeScript nel popup.js) in cui ricevo l'errore, fondamentalmente sto iniettando immagini da una delle mie cartelle di estensioni al DOM del sito Web:
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);
}
Risposte
Voglio spiegare cosa ho fatto per mantenerlo:
Fondamentalmente avvolgo tutto ciò che stava creando questo errore con:
typeof chrome.app.isInstalled !== "undefined"”
Sto ancora cercando di capire perché funziona, ad essere onesti. Capisco che ogni volta che aggiorno l'estensione gli script di contenuto vengono ancora iniettati sul sito Web (nel mio caso, catturando elementi dom, archiviando dati nella memoria locale di Chrome, ecc.) Ma non capisco perché quella dichiarazione eviti che ciò accada da allora l'estensione è ancora installata sul mio browser, sto solo aggiornando i file.
Se qualcuno può fornire una spiegazione più approfondita del motivo per cui funziona per me, per favore fai luce qui.
Dopo aver ricaricato l'estensione, i tuoi vecchi script di contenuto continueranno a risiedere nelle pagine aperte finché non li aggiorni. Tuttavia, il loro contesto rispetto all'estensione di Chrome andrebbe perso.
Solo un liner per evitare la situazione:
if(chrome.runtime.id == undefined) return;