Вопрос

Если я использую подчеркиваетсяS. _.шаблон() Внутри расширения Google Chrome я получаю следующую ошибку в консоли:

Ошибка UNCAUNT: Генерация кода из строк запрещено для этого контекста

Есть ли способ преодолеть эту ошибку?

Это было полезно?

Решение

К сожалению, я не думаю, что вы можете использовать underscore.js's _.template () из расширения Chrome ... по крайней мере с новым Manifest.json версии 2. То же самое относится и к попытке использовать Плагин шаблона jQuery.

Из расширения Google Chrome Политика безопасности контента страница:

Не существует механизма для ослабления ограничения против выполнения встроенного JavaScript. В частности, установление политики сценария, которая включает в себя небезопасную линию, не будет иметь никакого эффекта. Это намеренно.

Я собираюсь посмотреть на другие шаблонные двигатели, которые, надеюсь, не будут использовать новая функция объект.

Другие советы

Большое спасибо участнику списка хрома, который указал, что для создания Function объект в том, как подчеркивается, требуется manifest.json вариант для content_security_policy Включить «небезопасно».

В качестве примера, ваш manifest.json может быть

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

И тогда подчеркивая поведение будет работать, потому что эта политика позволяет это. Для получения дополнительной информации о формате см. Хромированную документацию по этой опции здесь.

я использую Underscore.js потому что я хочу Backbone.js Для расширения Chrome я только что изменил шаблонный двигатель на Mustache ~ Если у вас есть та же причина, вы также можете использовать underscore.js для основы, просто не используйте _.template() функция

Google только что выпустил новый документ, обсуждающий решение этой проблемы?

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

Ограничения Manifest v2, как указано выше, запрещают использовать Eval, New Function и встроенные сценарии - даже при игре с политикой безопасности контента: Нет возможности ослабить эту политику безопасности в расширениях V2.

Большинство библиотек шаблонов используют в тот или иной момент, эвал. Одним из решений является переписывание ваших расширений, чтобы вся логика находилась в JavaScript, и ничего в шаблоне; решение, такое как Google Jstemplate в этом случае будет использоваться.

Есть, однако, возможность выполнять Eval и новую функцию внутри Песочница Iframe, например, со следующими строками в манифесте:

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

Страница с песочницей не будет иметь доступа к расширению или приложениям API или прямому доступу к страницам, не связанным с сандбоками (она может общаться с ними через Postmessage ()). Вы можете дополнительно ограничить права на песочницу с помощью конкретного CSP

Теперь есть полный пример от команды Google Chrome на github eval в iframe о том, как обойти проблему, общаясь с мельчарной iframe, а также Короткий учебник по аналитике

Надеемся, что некоторая библиотека появится с использованием этого механизма, чтобы обеспечить полную совместимость со стандартными шаблонами, хотя я бы посоветовал удалить как можно больше логики из шаблонов по соображениям производительности ...

Благодаря Google, в линейке много переписываний расширения :(

Вы можете написать свой собственный мини-двигатель с помощью jQuery's $('<element .../>') строительство.

Чистый путь:

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

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

Грязный путь:

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

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

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

Например, довольно быстро переписать простые шаблоны jquery.tmpl, используя грязный метод, если вы знаете, что данные о замене не вредны и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top