gwt jsni变量名称混淆

时间:2016-05-17 15:42:54

标签: javascript gwt eval jsni

我在尝试使用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是在数据库中管理的,而不是在代码中管理的。那么在这种情况下该怎么办?这不可能吗?

1 个答案:

答案 0 :(得分:1)

使用功能代替:

return (new Function('myVar', 'return ' + scriptlet))(dateFieldValue);

这仍然与eval安全性一样糟糕,但无论如何都要干净得多。