gwt jsni变量名混淆

gwt jsni variable name obfuscated

我在尝试将 javascript eval() 与 gwt 一起使用时遇到问题。

基本上,我的数据库中有一个动态字符串,例如:

"'31.07.'  + (myVar.getMonth() <= 7 ? myVar.getFullYear() + 3: myVar.getFullYear() + 4 )"

myVar 应该是 javascript 日期类型的变量。

这个变量是通过 GWT JSNI 传递的:

private native String eval(Date dateFieldValue, String scriptlet) /*-{
  var myVar = dateFieldValue;
  return $wnd.eval(scriptlet);
}-*/; 

但是未找到 scriptlet 字符串中的 "myVar" 变量。 我找到了这个: https://support.google.com/code/answer/55205?hl=en

这解释了为什么会发生这种情况。 我将不得不以这种方式分离我的 scriptlet:

"'31.07.'  + (" + myVar + ".getMonth() <= 7 ? " + myVar + ".getFullYear() + 3: " + myVar + ".getFullYear() + 4 )"

问题是这不灵活,因为 scriptlet 是在数据库中管理的,而不是在代码中。那么在这种情况下该怎么办?这不可能吗?

改用函数:

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

在安全方面,这仍然与 eval 一样糟糕,但无论如何更清洁。