我在尝试使用gwt的javascript eval()时遇到问题。
基本上,我在我的数据库中有一个动态字符串,例如:
"'31.07.' + (myVar.getMonth() <= 7 ? myVar.getFullYear() + 3: myVar.getFullYear() + 4 )"
myVar应该是date类型的javascript变量。
此变量通过GWT JSNI传递:
private native String eval(Date dateFieldValue, String scriptlet) /*-{
var myVar = dateFieldValue;
return $wnd.eval(scriptlet);
}-*/;
但是&#34; myVar&#34;找不到scriptlet字符串中的变量。 我找到了这个: https://support.google.com/code/answer/55205?hl=en
这解释了为什么会发生这种情况。 我必须以这样的方式分离我的scriptlet:
"'31.07.' + (" + myVar + ".getMonth() <= 7 ? " + myVar + ".getFullYear() + 3: " + myVar + ".getFullYear() + 4 )"
问题在于这不灵活,因为scriptlet是在数据库中管理的,而不是在代码中管理的。那么在这种情况下该怎么办?这不可能吗?
答案 0 :(得分:1)
使用功能代替:
return (new Function('myVar', 'return ' + scriptlet))(dateFieldValue);
这仍然与eval
安全性一样糟糕,但无论如何都要干净得多。