是否有可能將js中的任意函數對象傳遞給Java端,因此java可以調用該js對象? (回調)將js回調函數作爲參數傳遞給Java addJavascriptInterface
例如,(訪問是已經註冊調用Java函數的函數)
access(function(blabla){
...
});
是否有可以處理Java中的匿名回調函數任何偉大的技術?
是否有可能將js中的任意函數對象傳遞給Java端,因此java可以調用該js對象? (回調)將js回調函數作爲參數傳遞給Java addJavascriptInterface
例如,(訪問是已經註冊調用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
}
}
的Java:
@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);
這是應該以某種方式內置到XWalk中的東西。這非常方便。 – Todd 2016-11-15 01:29:13
的Java:xwalk.post(新的Runnable(){@Override 公共 無效的run(){ xwalk.evaluateJavascript( 「(函數(){AndroidStatic.callBack(」 + 「\」」 +結果+ 「\」 「+」);})();「,null); } }); – cho 2016-11-15 16:05:12
Javascript:var AndroidStatic = { callBack:function(result){ // alert(result); console.log(result); } }; – cho 2016-11-15 16:05:36
'var'無法通過。檢查原始類型 – 2011-12-26 02:38:23
是什麼意思,@NikolaDespotoski?有一些旁路樣式嗎? – 2011-12-26 02:46:26
嘗試使用JSON字符串傳遞數據,而不是返回任意var對象.... – 2011-12-26 02:49:24