13

を使用するGoogle Chrome 拡張機能は、またはの使用manifest_version: 2が制限されています。私がチェックしたすべての JavaScript テンプレート ライブラリ (mustachejs、underscorejs、jQuery テンプレート、hoganjs など) は. どちらも使用しない、かなり成熟してサポートされているものはありますか?evalnew Functionnew Function

セキュリティ制限に関する情報

4

10 に答える 10

5

new Function最近追加された mustachejs がタグ 0.4.2を使用していないことがわかりました。Mustache.to_html代わりにAPI がわずかに異なる場合、Mustache.renderパフォーマンスが低下する可能性があります。

将来のリリースで削除される可能性がある問題をオープンしました。new Function

于 2012-05-24T21:15:02.160 に答える
3

Pureevalがまたはを使用しているようには見えませんnew Function

于 2012-05-24T20:30:44.737 に答える
3

ここでの回答は古くなっているため、更新を投稿します。

9 月以降、Google はポリシーを変更しunsafe-eval、マニフェスト 2 拡張機能を許可しました。このスレッドこのページを参照してください。

したがって、拡張機能で がオンになっている場合eval()new Function()などを使用するライブラリを使用できます。unsafe-eval

于 2012-11-11T20:55:24.903 に答える
2

遠位テンプレートはevalを使用しません。

于 2012-07-11T05:33:12.757 に答える
2

Closure Templatesは、 を使用しないテンプレート ライブラリですeval。テンプレートは事前に JavaScript にコンパイルされるため、アプリに含まれるものはプレーンな .js ファイルであり、CSP の問題が発生することはありません。

于 2012-05-25T01:00:02.210 に答える
2

「テンプレート ライブラリ」の意味によって異なります。文字列の補間だけが必要な場合は、evalorは必要ありません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">
    <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 要素を構築することもできますが、現状では、それが「テンプレート ライブラリ」としてカウントされるかどうかはわかりません。

于 2012-11-11T21:16:05.117 に答える
1

この問題の最善の解決策は、拡張機能をデプロイする前にテンプレートをプリコンパイルすることです。handlebarsjsecoはどちらも、機能として事前コンパイルを提供します。私は実際にもっと深く掘り下げたブログ投稿を書きました。

于 2012-07-18T23:22:14.917 に答える
0

たぶん、関数 eval1 を書くことができます:

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

必要なライブラリで検索/置換を行いますが、それは不正行為ですよね?

于 2012-05-28T04:32:41.910 に答える
0

最近、同じ問題に遭遇しました。マニフェスト バージョンを更新した後、拡張機能が機能しなくなりました。Mustache を試しましたが、配列のインデックスとオブジェクト プロパティの名前をレンダリングできませんでした。そのため、 と のない独自のシンプルだが効果的なテンプレート ライブラリAsheを作成する必要がevalありnew Functionました。それが誰かを助けることを願っています。

于 2012-07-14T20:42:50.457 に答える