Есть ли механизм шаблонов, который будет анализировать шаблоны в стиле ES6 template literals (например, "string ${var}"
), не нарушая ограничение по безопасности Content C Security для оценки скриптов?CSP-safe ES6 template literals
CSP restrictions on script evaluation предотвратить eval
, new Function
, setTimeout(string)
и setInterval(string)
.
Существует несколько шаблонных движков, которые могут предоставить или изменить, чтобы обеспечить что-то вроде шаблонов шаблонов в стиле ES6, таких как MicroTemplates от John Resig, lodash _.template и DoT.js. Однако все, похоже, нарушают CSP, используя new Function
.
Это было бы в некотором смысле удобно, если var
может быть неограниченным Javascript, но по видимым причинам это может быть невозможно. Однако мне нужно было бы модифицировать движок для форматирования вывода по желанию.
В сложившихся обстоятельствах производительность не вызывает беспокойства, и предварительная компиляция шаблонов не является вариантом. Другие имеют discussed pre-compilation.
В качестве дополнительного ограничения контент представляет собой текст, а не HTML. Я не думаю, что DOM-ориентированные шаблонные двигатели, такие как Knockout или PURE, не будут работать эффективно, в результате.
Моя первая мысль, чтобы начать с mustache.js и изменить его оттуда (то есть изменить mustache.tags = ['${', '}']
или DIY solution, но я был бы признателен за любые мысли по этой теме в целом, по-видимому, довольно недостаток обсуждения на ПСУ и шаблоны.
"При исполнении обстоятельствах не является проблемой" - string.replace с обратным вызовом тогда? обратный вызов может быть таким же простым, как 'return vars [key];'. –
Я предполагаю, что стоит упомянуть, что шаблоны ES6 являются CSP-безопасными (но обратите внимание, что они создают сайт для скриптинга). –
Что вы подразумеваете под «* удобным, если' var' может быть неограниченным Javascript * "'? – Bergi