如何在Javascript接口中将Javascript函数作为参数传递?

如何在Javascript接口中将Javascript函数作为参数传递?,java,javascript,android,android-jsinterface,Java,Javascript,Android,Android Jsinterface,如何在Javascript接口中将函数作为参数传递,将其保存为字符串,然后调用 例如,我描述了Javascript接口: class JSInterface{ String myFunction; //set function into myFunction attribute @JavascriptInterface public void setMyFunction(String func) { this.myFunction = func; } @Jav

如何在Javascript接口中将函数作为参数传递,将其保存为字符串,然后调用

例如,我描述了
Javascript接口

class JSInterface{
  String myFunction;

  //set function into myFunction attribute
  @JavascriptInterface
  public void setMyFunction(String func) {
    this.myFunction = func;
  }

  @JavascriptInterface
  public void executeMyFunction() {
    webView.loadUrl("javascript:"+this.myFunction);
  }

}
@JavascriptInterface
public void setMyFunctionAsString(String func) {
    this.myFunction = func;
}
加上:

//...

webview..addJavascriptInterface(new JSInterface, "application");

//...
JS
中:

window.application.setMyFunction(function(){
        //some code here...
});
注意:来自
JS
的传递函数需要采用这种形式,而不是字符串或json

但事实上,在
setMyFunction
中,我得到了
“未定义”
,但期望得到
“window.application.setMyFunction(function(){//some code here…});”
。请告诉我该做什么,我将非常感激

试试这个:

然后将函数调用附加到字符串:

function(){
..
}()

并对该字符串调用
eval()

要解决此问题,当函数传递为null时,我们需要将将js函数发送到
js接口的函数声明为字符串

我们还需要在
onPageFinished
时执行此操作

例如:

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl("javascript: window.APPLICATION.setMyFunction = function(func){"
        + "window.APPLICATION.setMyFunctionAsString(func.toString());"
        + "};");
    super.onPageFinished(view, url);
}
…和
JS界面中的
setMyFunctionsString

class JSInterface{
  String myFunction;

  //set function into myFunction attribute
  @JavascriptInterface
  public void setMyFunction(String func) {
    this.myFunction = func;
  }

  @JavascriptInterface
  public void executeMyFunction() {
    webView.loadUrl("javascript:"+this.myFunction);
  }

}
@JavascriptInterface
public void setMyFunctionAsString(String func) {
    this.myFunction = func;
}
现在,最后,当我们这样做的时候:

window.APPLICATION.setMyFunction(function(){
        //some code here...
});
我们将在
myFunction
中使用
“window.APPLICATION.setMyFunction(function(){\n//这里有一些代码…\n});”
,可以像这样轻松地调用它:

@JavascriptInterface
public void executeMyFunction() {
    webView.loadUrl("javascript:"+this.myFunction);
}

我希望这能帮助那些不太明白你意思的人。问题是我不能在
Javascript方面做任何事情。我只能处理传递给
Javasctipt Intarface
的参数。然后什么执行javascript?如果这是在客户端处理的,字符串中的函数应该足够了?是的,我需要将类似
“function(){//some code here…}”
的字符串设置为
myFunction
属性。这就足够了。但是我只得到了
“undefined”
。是的,我读过,但是,正如我所说的,我不能在Javascript端做任何事情,只能在Java端做。客户端需要执行一些语句,我想,无论如何,如果您想要自调用函数,请在末尾添加“()”。