是否有支持null合并(“未定义”安全)并保护XSS的JavaScript HTML模板?

时间:2012-03-31 21:29:13

标签: javascript template-engine dot.js

我一直在寻找一个JavaScript模板引擎,并选择了DoT.js(主要是因为它非常fast)但是有以下问题

  • Null safe / Undefined safe / null-coalescing ,就像在Freemarker / VTL中一样,我希望能够传递foo.bar.foobar而不用担心检查foo,foo .bar和foo.bar.foobar它们被定义为例如避免像

    这样的事情
    {{ var val='';try{ var=foo.bar.foobar }catch(){} }}{{= val}}
    

    我感觉很糟糕,或者

    {{= typeof foo !== 'undefined'?typeof foo.bar!=='undefined'?typeof foo.bar.foobar!=='undefined'?foo.bar.foobar:'foo.bar.foobar is undefined':'foo.bar is undefined':'foo is undefined'}}
    

    我不确定我是否感觉更好或更差

  • 我想要有良好的XSS保护,而且快速DoT.js不使用DOM,即使{{!运算符,我觉得世界上所有的XSS都会被查找和替换处理(例如,如果作者错过了什么),我感到不舒服。

    文档虽然它非常快,但它并不那么流行(但是),但是来源非常小,您可以通过阅读它们来弄清楚大多数事情,但拥有一个好的社区是一个很大的好处

哪个JavaScript模板库满足了这两个要求,并且仍然被认为是快速的?

2 个答案:

答案 0 :(得分:2)

https://github.com/mikesamuel/jquery-jquery-tmpl-proposal benchmarks与其他模板系统相比,并contextual autoescaping阻止XSS。

您可以从conformance suite看到它合并undefined

答案 1 :(得分:1)

mustache.js - 使用JavaScript的无逻辑{{mustache}}模板。

1) 如果密钥存在且值为null,undefined或false,或者是空列表,则不会呈现该块。

2) 默认情况下,所有变量都是HTML转义的。如果要渲染未转义的HTML,请使用三重胡须:{{{name}}}。你也可以用&取消变量。

参考:https://github.com/janl/mustache.js