Question

Si je underscore.js 's _ modèle () à l'intérieur d'une extension Google Chrome je reçois l'erreur suivante dans la console:

Uncaught Erreur: génération de code à partir de chaînes non reconnues pour ce contexte

Y at-il moyen de passer cette erreur?

Était-ce utile?

La solution

Malheureusement, je ne pense pas que vous pouvez utiliser _.template () de underscore.js à partir d'une extension de chrome ... au moins avec la nouvelle version manifest.json 2. La même chose vaut pour essayer d'utiliser le jQuery plug-in modèle .

à partir du contenu de l'extension Google Chrome Politique de sécurité:

Il n'y a pas de mécanisme pour se détendre la restriction contre l'exécution en ligne JavaScript. la mise en particulier, une politique de script qui comprend dangereux-ligne n'a aucun effet. Ceci est intentionnel.

Je vais regarder les autres moteurs de matriçage qui nous l'espérons ne pas utiliser le nouvelle fonction objet.

Autres conseils

Un grand merci à la contribution de la liste de chrome qui a souligné que pour créer un objet Function dans le trait de soulignement façon le fait nécessite l'option manifest.json pour content_security_policy d'inclure « -eval dangereux ».

À titre d'exemple, votre manifest.json pourrait être

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

et le comportement de underscore fonctionnerait parce que cette politique permet. Pour plus d'informations sur le format consultez la documentation Chrome sur cette option .

J'utilise Underscore.js parce que je veux Backbone.js pour mon extension Chrome, je viens de changer le moteur modèle pour Mustache ~ si vous avez la même raison, vous pouvez également utiliser Underscore.js pour Backbone, il suffit de ne pas utiliser la fonction _.template().

Google vient de publier un nouveau document à discuter la solution à ce problème?

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

limites Manifest v2, comme dit plus haut, interdit d'utiliser Eval, nouvelle fonction et scripts inline - même lors de la lecture avec le contenu de la politique de sécurité: il n'y a pas moyen de se détendre cette politique de sécurité dans la version 2 extensions.

La plupart des bibliothèques de modèles utilisent, à un moment ou un autre, evals. Une solution consiste à réécrire vos extensions afin que toutes les logiques en réside un javascript, et rien dans un modèle; une solution telle que google jstemplate devrait dans ce cas être utilisable.

Il y a, cependant, la possibilité de faire Eval et nouvelle fonction dans un sandbox iframe , par exemple avec les lignes suivantes dans le manifeste:

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

Une page sandbox n'aura pas accès à l'extension ou API d'application, ou un accès direct aux pages non sandbox (il peut communiquer avec eux par l'intermédiaire postMessage ()). Vous pouvez restreindre davantage les droits de bac à sable avec un CSP spécifique

Il y a maintenant un exemple complet de l'équipe Google Chrome sur analyse court tutoriel

Il faut espérer une bibliothèque affichera à l'aide de ce mécanisme pour assurer la compatibilité complète avec l'utilisation de modèles standard, bien que je vous conseille de retirer autant de logique à partir des modèles que possible pour des raisons de performance ...

Merci à Google, il y a beaucoup de l'extension de réécriture de la gamme: (

Vous pouvez écrire votre propre mini-moteur modèle en utilisant la construction de $('<element .../>') jQuery.

La manière propre:

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

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

La façon sale:

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

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

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

par exemple. il est assez rapide pour réécrire les modèles de jquery.tmpl simples en utilisant la méthode sale, si vous savez que les données de remplacement ne sont pas nuisibles, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top