Динамически созданные шаблоны с Polymer в приложении Chrome

Я работаю над приложением Chrome, которое должно делать две основные вещи:

  1. Автоматически создавать пользовательский интерфейс из списка полей и типов данных, предоставляемых подключенным устройством.
  2. Разрешить пользователям определять и публиковать свою собственную презентацию для пользовательского интерфейса и автоматически применять эту презентацию при подключении устройства.

Я использую Polymer и полагаю, что лучший способ достичь № 2 — использовать предоставленные пользователем элементы Polymer. Затем я могу просто привязать переменные устройства к пользовательскому интерфейсу, и пользовательский шаблон может определить, как их отображать и стилизовать.

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

Тогда мои вопросы:

  1. Как я могу динамически оценивать полимерный элемент/шаблон из удаленного источника, не нарушая CSP приложения Chrome и не создавая значительных проблем XSS? (Надеюсь, первое защитит меня от второго?)
  2. Как проще всего динамически генерировать разметку для элемента Polymer? Могу ли я определить меташаблон и использовать сгенерированную разметку?

person Nick Johnson    schedule 03.11.2014    source источник
comment
У меня нет полных ответов на ваши вопросы здесь, но для # 2 я заметил эту тему сегодня - groups.google.com/forum/#!msg/polymer-dev/ioVhx4Ynv4M/ и подумал, что это может вас заинтересовать.   -  person sfeast    schedule 04.11.2014


Ответы (1)


Я не совсем уверен, почему вы исключаете использование предопределенного элемента Polymer с (по общему признанию, сложной) логикой <template> в нем, но если вы уверены, что вам нужно, чтобы вещи были динамичными и генерировали содержимое элемента на лету, в то же время используя привязку данных Polymer, то injectBoundHTML() может быть тем, что вы ищете.

К сожалению, на данный момент он не задокументирован, но есть примеры его использования в отслеживании открытых проблем документация.

Вы можете получить «связанный» HTML-код из любого источника, и хотя я не являюсь экспертом в CSP, я не верю, что это вызовет какое-либо дополнительное рассмотрение CSP.

person Jeff Posnick    schedule 04.11.2014
comment
Единственная причина, по которой я исключил это, заключается в том, что я хочу иметь возможность создавать шаблон по умолчанию, который пользователи могут затем редактировать для своего конкретного устройства, вместо того, чтобы писать его с нуля, чтобы выполнить какую-либо настройку вообще. - person Nick Johnson; 05.11.2014
comment
Мне немного неясно, требуется ли/когда injectBoundHTML. Раздел руководства Polymer по динамическому импорту показывает способ вставки элемента с помощью Javascript, и, похоже, он не выполняет никакой специальной обработки для обновления элементов. Когда это необходимо и не нужно? - person Nick Johnson; 05.11.2014
comment
Я не много играл с динамическим импортом, но я думаю, что это еще один вариант, да. Теоретически у вас может быть куча разных HTML-файлов, каждый из которых имеет свое определение вашего <custom-element>, а затем импортировать соответствующий файл для каждого пользователя. Это просто другой подход к использованию одного определения элемента оболочки, чей теневой DOM заполнялся во время выполнения через сетевую выборку и injectBoundHTML(). - person Jeff Posnick; 05.11.2014
comment
Извините, я на самом деле имел в виду ссылку на императивную регистрацию, которая показывает, что простой установки innerHTML кажется достаточно, чтобы заставить Polymer распознавать новые элементы, что заставляет меня задаться вопросом, зачем вообще нужен injectBoundHTML. - person Nick Johnson; 05.11.2014
comment
Я считаю, что основное различие между .innerHTML и injectBoundHTML() описано на stackoverflow.com/questions/25433389 и связано с динамическим изменением существующих элементов. вместо регистрации новых элементов. Если вы хотите зарегистрировать новые элементы, то предположительно будет работать динамический импорт или настройка .innerHTML. - person Jeff Posnick; 06.11.2014