我有以下代码(伪代码):
$(function() {
var a = 'Hello world';
var api = Function;
api.start = function(e) {
e.preventDefault();
};
});
我想通过JSON对象(例如code
属性)将其发回给用户,然后使用eval
执行它。
如何逃避eval
函数稍后使用的那段代码?
答案 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};});"