Esegui il debug delle estensioni

Le estensioni possono accedere agli stessi Chrome DevTools delle pagine web. Per diventare esperto di debug delle estensioni, devi sapere come individuare i log e gli errori dei diversi componenti delle estensioni. Questo tutorial fornisce tecniche fondamentali per il debug dell'estensione.

Prima di iniziare

La presente guida presuppone che tu abbia esperienza di base nello sviluppo web. Ti consigliamo di leggere le Nozioni di base sullo sviluppo per un'introduzione al flusso di lavoro per lo sviluppo delle estensioni. Progetta l'interfaccia utente offre un'introduzione agli elementi dell'interfaccia utente disponibili nelle estensioni.

Interrompi l'estensione

Questo tutorial interrompe un componente dell'estensione alla volta e mostra come correggerlo. Ricordati di annullare i bug introdotti in una sezione prima di passare alla sezione successiva. Per iniziare, scarica l'esempio di colore non funzionante su GitHub.

Esegui il debug del manifest

Per prima cosa, rompiamo il file manifest modificando la chiave "version" in "versions":

manifest.json:

{
  "name": "Broken Background Color",
  "version": "1.0",
  "versions": "1.0",
  "description": "Fix an Extension!",
  ...
}

Ora proviamo a caricare l'estensione localmente. Verrà visualizzata una finestra di dialogo di errore che indica il problema:

Failed to load extension
Required value version is missing or invalid. It must be between 1-4 dot-separated integers each between 0 and 65536.
Could not load manifest.
Un'estensione con una chiave manifest non valida che attiva una finestra di dialogo di errore durante il caricamento.
Finestra di dialogo di errore di una chiave manifest non valida.

Quando una chiave manifest non è valida, l'estensione non viene caricata, ma Chrome ti suggerisce come risolvere il problema.

Annulla la modifica e inserisci un'autorizzazione non valida per vedere cosa succede. Cambia l'autorizzazione "activeTab" in "activetab" minuscolo:

manifest.json:

{
  ...
  "permissions": ["activeTab", "scripting", "storage"],
  "permissions": ["activetab", "scripting", "storage"],
  ...
}

Salva l'estensione e prova a caricarla di nuovo. Questa volta dovrebbe essere caricato correttamente. Nella pagina di gestione delle estensioni vedrai tre pulsanti: Dettagli, Rimuovi ed Errori. L'etichetta del pulsante Errori diventa rossa in caso di errore. Fai clic sul pulsante Errori per visualizzare il seguente errore:

Permission 'activetab' is unknown or URL pattern is malformed.
Il pulsante di errore viene selezionato e mostra un errore
Trovare un messaggio di errore facendo clic sul pulsante Errori.

Prima di continuare, ripristina l'autorizzazione, fai clic su Cancella tutto nell'angolo in alto a destra per cancellare i log e ricaricare l'estensione.

Pulsante Cancella tutto
Come eliminare gli errori delle estensioni.

debug del service worker

Individuazione dei log

Il service worker imposta il colore predefinito su storage e lo registra nella console. Per visualizzare questo log, apri il riquadro Chrome DevTools selezionando il link blu accanto a Ispeziona visualizzazioni.

Apro gli strumenti DevTools per il service worker dell'estensione.
Log del service worker nel riquadro Chrome DevTools.

Errori di localizzazione

Interrompiamo il service worker modificando onInstalled in oninstalled minuscolo:

service-worker.js:

// There's a typo in the line below;
// ❌ oninstalled should be ✅ onInstalled.
chrome.runtime.onInstalled.addListener(() => { 
chrome.runtime.oninstalled.addListener(() => { 
  chrome.storage.sync.set({ color: '#3aa757' }, () => {
    console.log('The background color is green.');
  });
});

Aggiorna e fai clic su Errori per visualizzare il log degli errori. Il primo errore indica che la registrazione del service worker non è riuscita. Questo significa che si è verificato un problema durante l'avvio:

Service worker registration failed. Status code: 15.
Registrazione del service worker non riuscita. Codice di stato: messaggio di errore 15
Messaggio di errore relativo alla registrazione del service worker.

L'errore effettivo si verifica dopo:

Uncaught TypeError: Cannot read properties of undefined (reading 'addListener')
Uncaught TypeError: impossibile leggere le proprietà del messaggio di errore non definito
Messaggio TypeError non rilevato.

Annulla il bug che abbiamo introdotto, fai clic su Cancella tutto nell'angolo in alto a destra e ricarica l'estensione.

Controllare lo stato del service worker

Puoi identificare quando il service worker si riattiva per eseguire le attività seguendo questi passaggi:

  1. Copia l'ID estensione che si trova sopra "Esamina visualizzazioni".
    ID estensione nella pagina Gestione delle estensioni
    ID estensione nella pagina Gestione delle estensioni.
  2. Apri il file manifest nel browser. Ad esempio: text chrome-extension://YOUR_EXTENSION_ID/manifest.json
  3. Esamina il file.
  4. Vai al riquadro Applicazione.
  5. Vai al riquadro Service worker.

Per testare il tuo codice, avvia o arresta il service worker utilizzando i link accanto a status.

Stato del service worker nel riquadro Applicazione
Stato del service worker nel riquadro Applicazione. (Fai clic per ingrandire l'immagine.)

Inoltre, se hai apportato modifiche al codice del service worker, puoi fare clic su Aggiorna o salta In attesa per applicare le modifiche immediatamente.

Stato del service worker nel riquadro Applicazione
Aggiornamento del service worker nel riquadro Applicazione. (Fai clic per ingrandire l'immagine.)

Esegui il debug del popup

Ora che l'estensione è stata inizializzata correttamente, interrompiamo il popup commentando le righe evidenziate di seguito:

popup.js:

...
changeColorButton.addEventListener('click', (event) => {
  const color = event.target.value;

  // Query the active tab before injecting the content script
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { 
    // Use the Scripting API to execute a script
    chrome.scripting.executeScript({
      target: { tabId: tabs[0].id },
      args: [color],
      func: setColor
    });
  });
});

Torna alla pagina Gestione delle estensioni. Il pulsante Errori viene visualizzato di nuovo. Fai clic per visualizzare il nuovo log. Viene visualizzato il seguente messaggio di errore:

Uncaught ReferenceError: tabs is not defined
Errore popup di visualizzazione della pagina Gestione delle estensioni
Errore popup nella pagina Gestione delle estensioni.

Puoi aprire DevTools esaminando il popup.

DevTools che mostra l'errore popup.
Errore popup di visualizzazione in DevTools.

L'errore tabs is undefined indica che l'estensione non sa dove inserire lo script dei contenuti. Per correggere questo problema, chiama il numero tabs.query(), quindi seleziona la scheda attiva.

Per aggiornare il codice, fai clic sul pulsante Cancella tutto nell'angolo in alto a destra, quindi ricarica l'estensione.

Esegui il debug degli script di contenuti

Ora interrompiamo lo script dei contenuti modificando la variabile "color" in "colors":

content.js:

...
function setColor(color) {
  // There's a typo in the line below;
  // ❌ colors should be ✅ color.
  document.body.style.backgroundColor = color;
  document.body.style.backgroundColor = colors;
}  

Aggiorna la pagina, apri il popup e fai clic sulla casella verde. Non succede nulla.

Se vai alla pagina Gestione delle estensioni, il pulsante Errori non viene visualizzato. Questo perché nella pagina Gestione delle estensioni vengono registrati solo gli errori di runtime, console.warning e console.error.

Gli script di contenuti vengono eseguiti all'interno di un sito web. Per trovare questi errori, dobbiamo controllare la pagina web che l'estensione sta cercando di modificare:

Uncaught ReferenceError: colors is not defined
Errore dell'estensione visualizzato nella console della pagina web
Errore dell'estensione visualizzato nella console della pagina web.

Per utilizzare DevTools dallo script dei contenuti, fai clic sulla freccia del menu a discesa in alto e seleziona l'estensione.

Errore di riferimento non rilevato: i colori non sono definiti
Errore di riferimento non rilevato: i colori non sono definiti.

L'errore indica che colors non è definito. L'estensione non deve trasmettere correttamente la variabile. Correggi lo script inserito in modo che passi la variabile del colore nel codice.

Monitora le richieste di rete

Il popup spesso esegue tutte le richieste di rete necessarie prima ancora che gli sviluppatori più veloci possano aprire DevTools. Per visualizzare queste richieste, aggiorna dall'interno del riquadro Rete. Ricarica il popup senza chiudere il riquadro DevTools.

Aggiorna il riquadro Rete per visualizzare le richieste di rete popup
Aggiorna il riquadro della rete per visualizzare le richieste di rete popup.

Dichiara le autorizzazioni

Alcune API delle estensioni richiedono le autorizzazioni. Consulta l'articolo sulle autorizzazioni e le API di Chrome per assicurarti che un'estensione richieda le autorizzazioni corrette nel file manifest.

  {
    "name": "Broken Background Color",
    ...
    "permissions": [
      "activeTab",
      "declarativeContent",
      "storage"
    ],
  ...
  }

Per approfondire

Scopri di più sugli Strumenti per sviluppatori di Chrome leggendo la documentazione.