35

seguito è il mio codice di HTMLestensione si rifiuta di caricare lo script a causa di contenuti direttiva politica di sicurezza

Scripts:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script src="background.js"></script> 

HTML:

 <button name="btnlogin" id="btnlogin">Login</button><br/><br/> 

e seguenti è js

$(document).ready(function(){ 
document.getElementById("#btnlogin").click(function(){ 
    alert("s"); 
}); 
}); 

m File Anifest:

{ 
"manifest_version": 2, 
"name": "One-click Kittens", 
"description": "This extension demonstrates a 'browser action' with kittens.", 
"version": "1.0", 
"browser_action": { 
"default_icon": "icon.png", 
"default_popup": "popup.html" 
}, 
} 

ho scoperto che quando ho eseguito questo codice semplicemente in del browser di avviso viene visualizzato correttamente, ma quando l'eseguo come estensione di Chrome mi dà seguito errori.

Uncaught ReferenceError: $ non è definita

e

Rifiutato di caricare lo script 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js' perché viola il seguente contenuto direttiva politica di sicurezza: "script src 'sé' cromo estensione delle risorse:".

Non capisco quali sono questi errori. Please help me capire l'estensione ..

Grazie

+2

Sembra che forse si sta seguendo una guida per rendere vecchia versione 1 estensioni manifesto ... '$ non è defined' mezzi jquery non è stato caricato e il secondo messaggio indica il motivo per cui jquery non è stato caricato. Dovresti mostrarci il tuo manifest per l'estensione. Ecco i documenti per i manifesti di estensione: https://developer.chrome.com/extensions/manifest – James

+4

Solo pacchetto jQuery nell'estensione. – abraham

+0

Ho scaricato il file jQuery e l'ho collegato alla pagina HTML. Questo ha funzionato, ma per quanto riguarda l'aggiornamento o la migrazione di jQuery? – Maharshi

risposta

47

In un'estensione Chrome, le fonti di script esterni devono essere esplicitamente autorizzati dal dell'interno content security policy (CSP) nel manifest:

If you have a need for some external JavaScript or object resources, you can relax the policy to a limited extent by whitelisting secure origins from which scripts should be accepted...

A relaxed policy definition which allows script resources to be loaded from example.com over HTTPS might look like:

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

Gli script possono solo essere caricato in un prolungamento su HTTPS, quindi è necessario caricare la risorsa jQuery CDN su HTTPS:

<script src="https://ajax.googleapis.com/..."></script> 

E aggiungere un CSP modificato per il vostro manifesto per consentire quella risorsa HTTPS:

{ 
    "manifest_version": 2, 
    "name": "One-click Kittens", 
    "description": "This extension demonstrates a 'browser action' with kittens.", 
    "version": "1.0", 
    "browser_action": { 
     "default_icon": "icon.png", 
     "default_popup": "popup.html" 
    }, 
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" 
} 

E ancora meglio la soluzione per il vostro caso particolare, però, sarebbe quello di includere jQuery nell'estensione a livello locale, invece di caricare da Internet (per esempio, la tua estensione al momento non funzionerà offline). Basta includere una copia di jQuery nella tua cartella di estensione e fare riferimento ad essa con un percorso relativo nel tuo tag di script. Supponendo la libreria jQuery e il file HTML popup sono nella stessa sottodirectory, semplicemente:

<script src="jquery-x.y.z.min.js"></script> 
+2

Cosa succede se hai più URL da consentire? Non vedo alcun esempio su come ottenerlo nella documentazione. –

+2

@TheMuffinMan Basta separarli per spazi.Si noti che il CSP è uno standard Web generale preso in prestito da Chrome aops/extensions; potresti avere una migliore fortuna in cerca di documenti/grammatica CSP in generale. – apsillers

+1

@apsillers Sto usando un'API in un'estensione chrome che viene pubblicata solo su http. Sto affrontando lo stesso errore. Potresti fornire il tuo pensiero su questo? Esempio di collegamento API: http://loklak.org/api/search.json?q=from%3Atwitter –

Problemi correlati