将JavaScript代码表示为字符串

时间:2014-02-05 14:39:16

标签: javascript eval

我有以下代码(伪代码):

$(function() { 
    var a = 'Hello world';
    var api = Function;
    api.start = function(e) {
        e.preventDefault();
    };
});

我想通过JSON对象(例如code属性)将其发回给用户,然后使用eval执行它。

如何逃避eval函数稍后使用的那段代码?

2 个答案:

答案 0 :(得分:0)

你必须真的信任回来的代码才允许这样做:

var myObj = {
    trustMe: "(function() { var a = 'Hello world'; alert(a);}());"
};

eval(myObj.trustMe);

如果您传回了数据,则可以将所有代码与对象分开...

var myObj = {
    justData: "Hello world;"
};

alert(myObj.justData);

我使用了一个JavaScript对象,但如果您要发回JSON,那么这个想法是一样的,您只需将字符串作为属性值。

答案 1 :(得分:0)

首先,我假设您有充分的理由这样做。其次,假设你想使用Java;你可以打电话给StringEscapeUtils.escapeJson(String);一旦转义,您的代码应该看起来像

"$(function() {\n\tvar a = 'Hello world';\n" 
    + "\tvar api = Function;\n\tapi.start = function(e) {\n"
    + "\t\te.preventDefault();\n\t};});"