使用 manifest_version: 2
的 Google Chrome 扩展程序被限制不能使用 eval
或 new Function
。我查过的所有 JavaScript 模板库(如 mustachejs、underscorejs、jQuery template、hoganjs 等)均使用了 new Function
。有没有一些相对成熟且得到支持的模板库不使用这两种方法呢?
使用 manifest_version: 2
的 Google Chrome 扩展程序被限制不能使用 eval
或 new Function
。我查过的所有 JavaScript 模板库(如 mustachejs、underscorejs、jQuery template、hoganjs 等)均使用了 new Function
。有没有一些相对成熟且得到支持的模板库不使用这两种方法呢?
看起来Pure并没有使用eval
或new Function
。
eval
或new Function
,但当您开始需要嵌套循环结构时,事情会变得更加复杂。String.prototype.tmpl.js
脚本,在我不介意覆盖String.prototype
的地方,我已经在一些地方使用了它。作为静态函数,您可以使用:
tmpl.js:
function tmpl(tmpl, o) {
return tmpl.replace(/<%=(?:"([^"]*)"|(.*?))%>/g, function (item, qparam, param) {
return o[qparam] || o[param];
});
}
<div id="bar"></div>
<script type="text/x-tmpl" id="foo"></script>
<script>
(function () {
var foo,
bar;
foo = document.getElementById('foo');
bar = document.getElementById('bar');
bar.innerHTML = tmpl(foo.innerHTML, {
title: 'foo bar baz',
body: 'lorem ipsum dolor sit amet'
});
}());
</script>
tmpl
脚本当然可以修改以利用文档碎片来实际构建DOM元素,但就目前而言,我不确定它是否算作“模板库”。https://developer.chrome.com/extensions/sandboxingEval
不确定是何时添加的,但现在你可以在Chrome中进行Firefox样式的沙盒操作。我正在移植我的Firefox扩展程序,所以我需要这个功能(因为我没有evalInSandbox :P)
我最近遇到了同样的问题。更新清单版本后,我的扩展停止工作。我尝试了 Mustache 但它无法呈现数组索引和对象属性名称的索引。因此,我不得不创建自己的简单而有效的模板库 Ashe,它免费且没有 eval
和 new Function
。希望它能帮助某人。