不幸的是,我的代码依赖于一些库,我无法推动解决方案到UI4J回购。
它基本上覆盖了正常的console.log并且工作方式类似。 它有意避免JSON.stringify(对象)因为循环依赖可能导致严重问题。
代码:
import netscape.javascript.JSObject;
import momomo.com.Opensource.sources.Functional.lambdas.version.interfaces.Lambda;
....
try {
this.page = navigate(IO.toString(file));
putConsole();
}
finally {
IO.remove(file);
}
private void putConsole() {
// Note that we call log using the entire arguments (array)
execute("console.log = function() {" +
put(CONSOLE) + ".log(arguments);" +
"};");
}
}
private static final Console CONSOLE = new Console();
public static final class Console {
public void log(JSObject js) {
StringBuilder sb = new StringBuilder();
iterate(js, (o) -> {
sb.append(o).append(" ");
});
$Log.info(Console.class, sb.toString());
}
}
public static void iterate(JSObject js, Lambda.V1<Object> lambda) {
iterate(js, lambda.R1());
}
public static void iterate(JSObject js, Lambda.R1<Boolean, Object> lambda) {
if (js != null) {
Object member;
int i = 0;
while (true) {
member = js.getSlot(i);
if ("undefined".equals(member) || Is.False(lambda.call(member))) {
return;
}
i++;
}
}
}
过时,而且有用Lambda.java参考:
https://github.com/momomo/Opensource/blob/master/src/momomo/com/Opensource/sources/Functional/lambdas/version/interfaces/Lambda.java
注意把(台)可拨打以上,基本要求执行( “窗口”)setMember (“key”,新的Console()),所以这里没有魔法,尽管我有一些其他的逻辑来实现相同的结果。
什么? java是为了像JavaScript一样的汽车去地毯。 – Neal
@Neal你需要回到2015年。另外,Rhino + EnvJS可以做得很好。 – momomo
@Neal感谢downvote。但我确实找出了这个问题的答案。 – momomo