Domanda

Se uso underscore.js 's _ modello () dall'interno di un'estensione di Google Chrome ottengo il seguente errore nella console:

errore non rilevato: la generazione di codice da stringhe annullato a causa di questo contesto

C'è un modo per superare questo errore?

È stato utile?

Soluzione

Purtroppo non credo che si può usare _.template di underscore.js () all'interno di un'estensione Chrome ... almeno con la nuova versione manifest.json 2. Lo stesso vale per il tentativo di utilizzare il jQuery Template plug .

contenuto della pagina politica di sicurezza di Google Chrome Extension:

Non v'è alcun meccanismo per rilassarsi la restrizione contro l'esecuzione di JavaScript inline. In particolare, l'impostazione di una politica script che include non sicuro-linea non avrà alcun effetto. Questo è intenzionale.

ho intenzione di guardare in altri motori di templating che non si spera utilizzare il nuova funzione oggetto.

Altri suggerimenti

Molte grazie per la lista collaboratore di cromo, che ha sottolineato che per creare un oggetto Function nel modo sottolineatura sta facendo richiede l'opzione manifest.json per content_security_policy per includere 'insicuro-eval'.

Per fare un esempio, il tuo manifest.json potrebbe essere

{
  "manifest_version": 2,
  ...
  "content_security_policy": "script-src 'self' 'unsafe-eval'",
  ...
}

e poi il comportamento di sottolineatura avrebbe funzionato perché questa politica lo permette. Per ulteriori informazioni sul formato consultare la documentazione Chrome su questa opzione qui .

Io uso Underscore.js perché voglio Backbone.js per la mia estensione Chrome, ho appena cambiato il motore di template per Mustache ~ se avete la stessa ragione, è anche possibile utilizzare Underscore.js per Backbone, basta non usare la funzione _.template().

Google ha appena rilasciato un nuovo documento a discutere la soluzione per questo problema?

http://code.google.com/chrome/extensions/trunk/ sandboxingEval.html

limitazioni v2 manifesta, come detto in precedenza, non voglia usare Eval, nuova funzione, e gli script in linea - anche quando si gioca con la politica di sicurezza contenuti: non c'è modo per rilassarsi questa politica di sicurezza in v2 estensioni.

La maggior parte delle librerie di modelli utilizzano, ad un certo punto o un altro, evals. Una soluzione è quella di riscrivere le estensioni in modo che tutti i risiede logica in un javascript, e nulla in un modello; una soluzione come google jstemplate deve in questo caso essere utilizzabili.

Non c'è, però, la possibilità di fare Kit e nuova funzione all'interno di una sandbox iframe , per esempio con le seguenti righe nel manifesto:

"sandbox": {
    "pages": [
      "page1.html",
      "directory/page2.html"
    ]
},

Una pagina in modalità sandbox non avrà accesso alla proroga o API app, o l'accesso diretto alle pagine non in modalità sandbox (può comunicare con loro tramite postMessage ()). È possibile limitare ulteriormente i diritti sandbox con una specifica CSP

C'è ora un esempio completo da parte del team di Google Chrome sul github eval in iframe su come aggirare il problema comunicando con un iframe sandbox, nonché un brevi analisi esercitazione

Speriamo che qualche libreria verrà visualizzato utilizzando questo meccanismo per fornire la piena compatibilità con l'utilizzo standard modelli, anche se vorrei consigliare eliminando quanto più logica tra i modelli più possibile per motivi di prestazioni ...

Grazie a Google, ci sono un sacco di estensione riscrittura in scaletta: (

È possibile scrivere il proprio modello di mini-motore con la costruzione $('<element .../>') di jQuery.

Il modo pulito:

function myElement(text) {
  var d = $('<div class="abc"/>');
  d.text(text);
  return d;
}

myElement('my text').appendTo(domParent);

Il modo sporco:

var yourTemplate = '<div>${somevar}</div>';

function instTemplate(tmpl, text) {
  return $(tmpl.replace(/\$\{somevar\}/g, text));
}

instTemplate(yourTemplate, 'your text').appendTo(domParent);

es. è abbastanza veloce per riscrivere semplici modelli jquery.tmpl utilizzando il metodo sporco, se si sa che i dati di sostituzione non è nocivo, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top