Errore di porta durante la modifica dell’estensione chrome da manifest v1 a v2

Durante il tentativo di trasferire l’estensione dalla versione manifest alla versione 2, è apparso:

Errore porta: imansible stabilire una connessione. La fine di ricezione non esiste. chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings: 232

Questo è apparso in Console negli strumenti di sviluppo. Non ho idea di dove iniziare a correggere questa causa non so cosa sta causando a cominciare con ..

cosa può causare questo problema? ed è in qualche modo ansible sapere esattamente cosa lo sta causando? Grazie.

La causa più probabile di errore è l’triggerszione della politica di sicurezza del contenuto predefinita quando "manifest_version": 2 è attivo. Una conseguenza del CSP predefinito è che JavaScript in linea non verrà eseguito .

  

La riga precedente è un esempio di codice inline. La soluzione è posizionare lo script in un file JS esterno:

  

Pagine di sfondo / script

Quando stavi usando le pagine in background , non usare:

  • "background_page": "background.htm" , o
  • "background": {"page": "background.htm"} ,
    ma
  • "background": {"scripts": ["background.js"]}
    dove background.js contiene lo script inizialmente posizionato all’interno dei tag in background.htm .

Ascoltatori di eventi in linea

I popup di azione del browser, i lanciatori di app, le pagine di opzioni, ecc. Spesso contengono listener di eventi in linea. Dal CSP, questi sono anche vietati.

non funziona . La soluzione è aggiungere l'evento in un file JS esterno usando addEventListener . Dai un'occhiata alla documentazione o questa risposta per un esempio.

Altro

  • La creazione di JavaScript da stringhe ( eval , Function , setTimeout , ...) è vietata. Riscrivi il tuo codice per non creare codice dalle stringhe, o usa l' opzione manifest sandbox (introdotto in Chrome 21). A partire da Chrome 22 , è ansible utilizzare la politica CSP di unsafe-eval per eliminare questa limitazione.
  • JSONP non funziona, perché le risorse esterne (JavaScript) non possono essere caricate nel contesto dell'estensione . Utilizzare un ordinario XMLHttpRequest invece di JSONP ( ulteriori informazioni + esempio ).
    L'unica eccezione è quando la risorsa viene recuperata su https non http . Il CSP può essere regolato per introdurre questa eccezione - consultare la documentazione :

     "content_security_policy": "script-src 'self' https://example.com; object-src 'self'", 

Documentazione ufficiale

La documentazione ufficiale fornisce anche un'eccellente spiegazione sull'argomento, vedi "Tutorial: Migrazione a Manifest V2" .

Per me la soluzione stava cambiando:

  

a:

  

Forse è anche aiutare gli altri!