English 中文(简体)
JavaScript 不使用 evval/ new 函数的 JavaScript 模板库
原标题:JavaScript template library that doesn t use eval/new Function

使用 manifest_version: 2 的 Google Chrome 扩展使用 manifest_version: 2 受限制不得使用 eval new 函数 。 我检查的所有 JavaScript 临时图书馆( mustachejs, preyjs, jQuery 模板, hoganjs 等) 都使用 new 函数 。 是否有任何已经相当成熟且支持不使用?

问题回答

似乎“http://beebole.com/pure/' rel=“nofollow”>>Pure 既未使用eval ,也未使用new函数

这里的答案已经过时,所以我发表最新消息。

自9月以来,谷歌改变了政策,允许在舱面2扩展中 un safe-eval 。见这一线索 和这一页

因此,使用 eval () , new 函数 () etc. > 等的图书馆可以使用,如果您的扩展使用 unse-eval 开关时打开 unse-eval

< a href=> "https:// developmenters.google.com/clocure/templates/" rel="nofol" >Clocure Texts 是一个不使用 eval 的临时图书馆。 模板会提前编译到 JavaScript, 这样, 您应用程序中包含的内容会是一个普通的. js 文件, 不应该出现在 CSP 问题中 。

< a href=> "http://code.google.com/p/distal" rel="no follow" > Distal 模板没有使用 evval 。

它真的取决于您所说的“ 模板库” 的含义。 如果您想要字符串内插, 不需要 < code> eval 或 < code> new 函数 , 当你开始需要嵌入的循环结构时, 事情会变得更加复杂 。

几个月前,我写了一本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];
    });
}
An example template:
<div id="bar"></div>
<script type="text/x-tmpl" id="foo">
    <h1><%=title%></h1>
    <p><%=body%></p>
</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 元素,但我不清楚它是否算作“ 模板库 ” 。

这个问题的最好解决办法是, 在您部署扩展之前先对您的模板进行编译 。 两者 都 < a href="http:// handlebarsjs.com/" rel="no follow"> handlebarsjs 和 < a href="https://github.com/stephenson/eco/" rel="nofollow">eco 提供预译功能。 我实际上写了一个 < a href=" http://matthewrobertson. org/blog/2012/07/10/javascript- templates-and-chromes- content- policy/" rel=" " nofol=" "nofolpolt" 后, 后写得更深入。

也许你可以写一个函数 Eval1 :

function eval1(blah) {
    var s = document.createElement("script");
    s.src = blah;
    document.head.appendChild(s);
    document.head.removeChild(s);
}

在你想要的图书馆里找/换个地方 但那是作弊,对吧?

我最近遇到了同样的问题。 在更新了列表版本后, 我的扩展名停止工作 。 我尝试了胡子, 但它无法转换对象属性的数组和名称的索引 。 所以我不得不创建我自己的简单而有效的临时图书馆 < a href=" https://github.com/dfsq/Ashe" rel= "nofollow" > Ashe , 它没有 eval new 函数 。 希望它能帮助别人 。

https:// developer.chrome.com/extensions/sandboxingEval

不清楚什么时候添加了它, 但是您现在可以在铬中做 Firefox 风格的沙箱。 我正在移植我的 Firefox 扩展名, 所以我需要这个( 因为我没有 evalInSandbox: P )

我刚刚尝试了“a href=”“https://github.com/harttle/leculicjs” rel=“不跟随 nofollow noreferrer”>Liquid ,但并未触发 CSP 错误。

顺便说一下 手帕现在给CSP出错了

我还没有尝试过其他人。





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签