不幸的是,我的代碼依賴於一些庫,我無法推動解決方案到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