JavaScript的模板引擎与Chrome的内容安全政策工作(Javascript Templat

2019-07-30 10:35发布

该浏览器API的清单第2版已删除做到不安全-EVAL的能力。 这意味着使用eval功能或通常动态地创建从文本的功能。

这似乎是大多数,如果不是所有的JavaScript模板引擎做到这一点。 我用JAML,但我试过几个类似Backbone.js的(真正的使用underscore.js的模板引擎),没有运气。

在Chromium项目这一评论似乎表明,有从这个遭受了大量的库。

我认为Angular.js有CSP安全模式,但Angular.js实在是太大了,我们所需要的。 我们只需要一个相当基本的模板引擎,无需模型或控制器和这样的。 有谁知道任何CSP-compatbility模板引擎在那里?

Answer 1:

解决这个问题的最佳解决方案是您部署扩展之前预先编译模板。 无论handlebarsjs和生态提供预编译的功能。 其实,我写了一篇博客文章是进入更深入。



Answer 2:

你绝对应该使用预编译为中型和大型模板建议马修。 对于非常小的模板,我们使用的是这样的:

var template = function(message, data) {
  if (typeof data === 'undefined') {
    return _.partial(template, message);
  } else {
    return message.replace(/\{\{([^}]+)}}/g, function(s, match) {
      var result = data;
      _.each(match.trim().split('.'), function(propertyName) {
        result = result[propertyName]
      });
      return _.escape(result);
    });
  }
};

var data = {
  foo: 'Hello',
  bar: { baz: 'world!' }
};

// print on-the-fly
template('{{foo}}, {{bar.baz}}' args); // -> 'Hello, world!'

// prepare template to invoke later
var pt = template('{{foo}}, {{bar.baz}}');
pt(args); // -> 'Hello, world!'

此实现不使用eval,但它需要下划线。



文章来源: Javascript Template Engines that work with Chrome's Content Security Policy