js 内の任意の機能オブジェクトを Java 側に渡して、java がその js オブジェクトを呼び出せるようにすることはできますか? (コールバック)
たとえば、(access は、Java 関数を呼び出すために既に登録されている関数です)
access(function(blabla){
...
});
Javaで匿名コールバック関数を処理できる優れたテクニックはありますか?
js 内の任意の機能オブジェクトを Java 側に渡して、java がその js オブジェクトを呼び出せるようにすることはできますか? (コールバック)
たとえば、(access は、Java 関数を呼び出すために既に登録されている関数です)
access(function(blabla){
...
});
Javaで匿名コールバック関数を処理できる優れたテクニックはありますか?
個々のコールバック匿名関数を参照するには、何らかのキーが必要です。これはjsonpも時々使われる方法だと思います。
Javascript:
var callbacks = [];
function registerCallback(callback)
{
callbacks.push(callback);
return callbacks.length - 1;
}
function getCallback(index)
{
var callback = callbacks[index];
callbacks[index] = null;
TryGCCallbacks();
return callbacks;
}
//The array index positions must be preserved, but when it's empty, we should restart the array so it doesn't grow forever
function TryGCCallbacks()
{
var isCallbackRemaining = false;
for (var i = 0; i < callbacks.length; i++)
{
if (callbacks[i] == null) {
continue;
}
isCallbackRemaining = true;
break;
}
if (isCallbackRemaining == false)
{
callbacks = []; //reset
}
}
ジャワ:
@org.xwalk.core.JavascriptInterface
public String TestCallback(String someData, String onSuccess, String onError){
xwalk.evaluateJavascript("getCallback(" + onSuccess + ")('success');", null);
}
Javascript からこれを使用する:
var onSuccess = registerCallback(function(r) {
console.log(r);
});
TestCallback('lalala', onSuccess, null);