Frage

Wenn ich benutze unterstrichen.js's _.Schablone() Aus einer Google Chrome -Erweiterung erhalte ich den folgenden Fehler in der Konsole:

Unbefundter Fehler: Codegenerierung aus Strings, die für diesen Kontext nicht zugelassen sind

Gibt es eine Möglichkeit, diesen Fehler zu überwinden?

War es hilfreich?

Lösung

Leider glaube ich nicht, dass Sie unter einer Chrome -Erweiterung unter -chore.js _.template () verwenden können JQuery Template Plugin.

Aus der Google Chrome -Erweiterung Inhaltssicherheitsrichtlinie Seite:

Es gibt keinen Mechanismus, um die Einschränkung gegen die Ausführung von Inline -JavaScript zu lockern. Insbesondere hat das Festlegen einer Skript-Richtlinie, die unsichere Inline enthält, keine Auswirkung. Dies ist beabsichtigt.

Ich werde mir andere Vorlagenmotoren ansehen, die das hoffentlich nicht verwenden werden neue Funktion Objekt.

Andere Tipps

Vielen Dank an den Chromlisten -Mitwirkenden, der darauf hingewiesen hat, dass ein erstellt wurde, um a zu erstellen Function Objekt in der Art und Weise, wie es unterstrichen ist, erfordert die manifest.json Option für content_security_policy 'unsicher-eval' einbeziehen.

Als Beispiel Ihre manifest.json könnte sein

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

Und dann würde das Unterstrichverhalten funktionieren, da diese Richtlinie dies zulässt. Weitere Informationen zum Format finden Sie in der Chrome -Dokumentation zu dieser Option hier.

ich benutze Underscore.js weil ich will Backbone.js Für meine Chromverlängerung habe ich gerade die Vorlagemotor zu der Template -Engine geändert Mustache ~ Wenn Sie den gleichen Grund haben, können Sie auch Unscore.js für Backbone verwenden, einfach nicht verwenden _.template() Funktion.

Google hat gerade ein neues Dokument veröffentlicht, in dem die Lösung für dieses Problem erläutert wird?

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

Manifestiert V2 -Einschränkungen, wie oben erwähnt, verbieten, eval-, neue Funktions- und Inline -Skripte zu verwenden - auch beim Spielen mit der Inhaltssicherheitsrichtlinie: Es gibt keine Möglichkeit, diese Sicherheitsrichtlinie zu entspannen In V2 -Erweiterungen.

Die meisten Vorlagenbibliotheken verwenden irgendwann Evals. Eine Lösung besteht darin, Ihre Erweiterungen so umzuschreiben, dass alle Logik in einem JavaScript und nichts in einer Vorlage liegen. eine Lösung wie z. Google JStemplate sollte in diesem Fall nutzbar sein.

Es gibt jedoch die Option, Evaly und neue Funktionen in a zu machen Sandboxed Iframe, Zum Beispiel mit den folgenden Zeilen im Manifest:

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

Eine Sandbox-Seite hat keinen Zugriff auf Erweiterungs- oder App-APIs oder direkten Zugriff auf nicht sandkastenbezogene Seiten (sie kann mit ihnen über PostMessage () kommunizieren). Sie können die Sandkastenrechte mit einem bestimmten CSP weiter einschränken

Es gibt jetzt ein vollständiges Beispiel des Google Chrome -Teams im Google Chrome github eval in iframe Wie man das Problem durch Kommunikation mit einem Sandbox -Iframe sowie a umkommt, um zu umgehen Kurzanalyse -Tutorial

Hoffentlich wird eine Bibliothek mit diesem Mechanismus angezeigt, um die volle Kompatibilität mit Standardvorlagen zu bieten, obwohl ich aus Leistungsgründen so viel Logik wie möglich aus den Vorlagen entfernen würde ...

Dank Google gibt es in der Aufstellung viel Umschreiben von Erweiterungen :(

Sie können Ihre eigene Vorlage-Mini-Engine mit JQuery's schreiben $('<element .../>') Konstruktion.

Der saubere Weg:

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

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

Der schmutzige Weg:

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

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

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

ZB Es ist ziemlich schnell, einfache jQuery.tmpl -Vorlagen mit der schmutzigen Methode neu zu schreiben, wenn Sie wissen, dass die Ersatzdaten nicht schädlich sind, usw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top