2017-03-11 5 views
0

これは配列を返すべきではありませんか? オブジェクトを渡してクライアントの動作を模倣するのが非常に難しくなります。JXBrowser - Array.isArray(exception.getStackTrace())falseを返す

実際にはwindow.asObject().setProperty("aaa", new String[]{"bbb"});でもJavascript配列ではありません。

execute("aaa.splice != null ? 'a' : 'b'") 
execute("Arrays.isArray(aaa) ? : 'a' : 'b'") 

UI4JとRhinoではうまく動作しますが、現在JXBrowserでは動作しません。

答えて

1

JxBrowserでは、Javaプリミティブ型のみがネイティブJavaScript型に変換されます。他の型の場合、JSObjectに設定するプロパティは対応するJavaオブジェクトにマップされ、JavaScriptオブジェクトのメソッドを呼び出すと、Javaオブジェクトの対応するメソッドが実際に呼び出されます。現在の実装では配列のため、いくつかの制限がありますが、しかし、あなたは、配列のサイズを取得し、インデックスによってそのメンバーにアクセスすることができます。

のJava:

window.setProperty("arr", new String[]{"aaa", "bbb", "ccc"}); 

はJavaScript:

var length = window.arr.length(); 
for (int i = 0; i < length; i++) { 
    console.log(window.arr[i]); 
} 
+0

はい、Iそれを理解しよう。しかし、javascriptの実装/ apiが配列である可能性のある引数をとり、潜在的なJavaオブジェクトを使用してjavaからその配列を渡すことにした場合、問題があります。私の場合は、配列か "ハッシュマップ"オブジェクトかどうかをチェックしていましたが、最初にそれを反復した場合は、例外から配列を渡すなど、Javaの世界からこのapiメソッドを使用すると異なります。それで... getstackTrace()..それは失敗します... 彼らはスリングブラケットの表記法にアクセスできるようにした場合、カスタムjsを提供することが可能でなければなりません。 – momomo

+0

...また、ここでもobjectss – momomo

+0

ようなアレイのため...()チェックでIsArrayを通過することはない実装であり、その例に: https://hastebin.com/nolivugopi.js帰属する: HTTPS: //www.bennadel.com/blog/2292-extending-javascript-arrays-while-keeping-native-bracket-notatio n-functional.htm – momomo