Pregunta

Si uso subrayado.js's _.modelo() Desde dentro de una extensión de Google Chrome, recibo el siguiente error en la consola:

Error no abierto: generación de código desde cadenas no permitidas para este contexto

¿Hay alguna forma de superar este error?

¿Fue útil?

Solución

Desafortunadamente, no creo que puedas usar subscore.js's _.template () desde dentro de una extensión de Chrome ... al menos con el nuevo manifest.json versión 2. lo mismo es cierto para tratar de usar el complemento de plantilla jQuery.

De la extensión de Google Chrome Política de seguridad de contenido página:

No existe un mecanismo para relajar la restricción contra la ejecución de JavaScript en línea. En particular, establecer una política de script que incluya en línea insegura no tendrá efecto. Esto es intencional.

Voy a ver otros motores de plantilla que con suerte no usarán el nueva función objeto.

Otros consejos

Muchas gracias al contribuyente de la lista de Chromium que señaló eso para crear un Function El objeto en la forma en que el subrayado lo está haciendo requiere el manifest.json opción para content_security_policy incluir 'inseguro-eval'.

Como ejemplo, tu manifest.json podría ser

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

Y luego el comportamiento subrayado funcionaría porque esta política lo permite. Para obtener más información sobre el formato, consulte la documentación de Chrome sobre esta opción aquí.

yo suelo Underscore.js porque quiero Backbone.js Para mi extensión de Chrome, acabo de cambiar el motor de plantilla a Mustache ~ Si tiene la misma razón, también puede usar underscore.js para la columna vertebral, simplemente no use _.template() función.

¿Google acaba de publicar un nuevo documento que discute la solución para este problema?

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

Las limitaciones de V2 manifiestas, como se dijo anteriormente, prohíben usar evaluaciones evaluadas, nuevas funciones y en línea, incluso cuando se reproducen con la política de seguridad de contenido: No hay forma de relajar esta política de seguridad. En extensiones V2.

La mayoría de las bibliotecas de plantillas usan, en algún momento u otro, evals. Una solución es reescribir sus extensiones para que toda la lógica reside en un JavaScript, y nada en una plantilla; una solución como Google jstemplate en este caso debería ser utilizable.

Sin embargo, hay la opción de hacer evaluación y nueva función dentro de un iframe de arena, por ejemplo con las siguientes líneas en el manifiesto:

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

Una página de sandboxed no tendrá acceso a las API de extensión o aplicación, o acceso directo a páginas no con arandelas (puede comunicarse con ellas a través de PostMessage ()). Puede restringir aún más los derechos de Sandbox con un CSP específico

Ahora hay un ejemplo completo del equipo de Google Chrome en el GitHub Eval en iframe Sobre cómo eludir el problema comunicándose con un iframe de sandboxed, así como un Tutorial de análisis corto

Esperemos que se muestre una biblioteca utilizando este mecanismo para proporcionar una compatibilidad completa con el uso de plantillas estándar, aunque recomendaría eliminar la mayor cantidad de lógica de las plantillas como sea posible por razones de rendimiento ...

Gracias a Google, hay mucha reescritura de extensión en la alineación :(

Puedes escribir tu propia plantilla mini motor usando jQuery's $('<element .../>') construcción.

La forma limpia:

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

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

El camino sucio:

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

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

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

Por ejemplo, es bastante rápido reescribir plantillas jQuery.tmpl utilizando el método sucio, si sabe que los datos de reemplazo no son dañinos, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top