我在尝试将 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
这解释了为什么会发生这种情况。 我必须以这种方式分离我的脚本:
"'31.07.' + (" + myVar + ".getMonth() <= 7 ? " + myVar + ".getFullYear() + 3: " + myVar + ".getFullYear() + 4 )"
问题是这不灵活,因为脚本是在数据库中管理的,而不是在代码中管理的。那么这种情况下该怎么办呢?这不可能吗?
最佳答案
使用函数代替:
return (new Function('myVar', 'return ' + scriptlet))(dateFieldValue);
这在安全性方面仍然和 eval
一样糟糕,但无论如何都干净得多。
关于javascript - gwt jsni变量名混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37280792/