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
一样糟糕,但无论如何更清洁。
我在尝试将 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
一样糟糕,但无论如何更清洁。