Использование Polymer в приложении Dart Chrome

Я пытаюсь создать приложение с Dart и Polymer. Но полимерные скрипты, похоже, используют eval() в web_components/platform.js:32. Кому-нибудь удалось это сделать? Я пытался изменить CSP, но это помогло в первую очередь.

У кого-нибудь есть рабочий пример?

С уважением и благодарностью Роберт

ИЗМЕНИТЬ

манифест.json:

{
  "name": "Animatr app",
  "version": "1",

  "author": "Robert Hartung",

  "manifest_version": 2,

  "icons": {"128": "animatr_icon.png"},

  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  },

  "content_security_policy": "script-src 'self' unsafe-inline;"
}

основной.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Animatr app</title>
    <link rel="stylesheet" href="animatr_chrome_app.css">
    <link rel="import" href="packages/polymer/polymer.html">
  </head>
  <body>

    <script src="packages/chrome/bootstrap.js" defer></script>
    <script src="my_chrome_app.dart" type="application/dart;component=1"></script>    
  </body>
</html>

ОШИБКА:

Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "default-src 'self' chrome-extension-resource:". Note that 'script-src' was not explicitly set, so 'default-src' is used as a fallback. (chrome-extension://ofkfcbfhgkoglbgldcdokficikimdjji/packages/web_components/platform.js:32)
Refused to execute inline script because it violates the following Content Security Policy directive: "default-src 'self' chrome-extension-resource:". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.

pubspec.yaml:

name: animatr_app
description: A sample Chrome packaged application
dependencies:
  chrome: any
  polymer: any
transformers:
- chrome
- polymer:
    entry_points:
    - app/animatr_chrome_app.html
    csp: 'true'

Приложение неправильно распознает полимерные элементы.


person Robert    schedule 17.05.2014    source источник
comment
Не могли бы вы добавить дополнительную информацию (сообщение об ошибке, pubspec.yaml, структуру пакета, manifest.json, ...)   -  person Günter Zöchbauer    schedule 17.05.2014
comment
На Дартиуме нормально работает? (без сборки на js)   -  person Anthony Bobenrieth    schedule 17.05.2014
comment
Я пробовал только с чистым дротиком и хромом. Запуск приложения из редактора дартс.   -  person Robert    schedule 17.05.2014
comment
Я отредактировал свой пост, чтобы показать вам код.   -  person Robert    schedule 17.05.2014
comment
Я не знаю подробностей, но инструмент Polymer под названием Vulcanizer необходим, чтобы сделать Polymer CSP-совместимым. Я думаю, что идея в том, что он объединяет все компоненты в одно включение, чтобы избежать необходимости динамического включения дополнительного JavaScript.   -  person sowbug    schedule 18.05.2014


Ответы (2)


Вы можете взглянуть на https://github.com/dart-lang/spark/tree/master/ide для примера Dart Chrome-Packaged-App. Они также активно используют Polymer.

Возможно, это связано с https://github.com/Polymer/polymer/issues/252.

Похоже, это связанная с Dart ошибка https://code.google.com/p/dart/issues/detail?id=17409

person Günter Zöchbauer    schedule 17.05.2014
comment
Это, безусловно, связано, спасибо, Гюнтер! Посмотрим, сможем ли мы найти решение :) - person Robert; 17.05.2014

Я боролся с той же проблемой, пытаясь запустить полимерное приложение, сгенерированное простым мастером (тот, что со счетчиком), как упакованное приложение Chrome. Мне, наконец, удалось хотя бы запустить версию, построенную на javascript, пытаясь понять проблемы csp. По многим причинам кажется, что оно не может работать native, так как упакованное приложение загружается из файловой системы, а не через pub serve. Загрузка распакованного расширения из web/build тоже не работала. Решение состояло в том, чтобы загрузить xxx.html_bootstrap.dart.precompiled.js вместо xxx.html_bootstrap.js из сгенерированного HTML-файла. Я сделал следующее:

  • удалить преобразователь chrome, так как преобразователь полимера уже заменил ссылку на скрипт dart ссылкой на скрипт javascript.
  • добавить csp: true в параметр полимерного трансформатора (хотя и без него работало)
  • Чтобы избежать необходимости вручную изменять сгенерированный html для загрузки версии precompiled.js, я написал простой преобразователь.
  • Затем я могу загрузить в Chrome (не обязательно Dartium, так как это javascript) распакованное расширение из web/build после запуска pub build (требуется режим выпуска)

Теперь у меня просто есть это предупреждение:

Deprecation: Automatic generation of output for Content Security
Policy is deprecated and will be removed with the next development
release. Use the --csp option to generate CSP restricted output.

что означает, что, вероятно, мне скоро придется найти новый хак ...

person alextk    schedule 20.09.2014