繁体   English   中英

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

[英]How to pass a Javascript function as an argument in Javascript Interface?

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

例如,我描述了Javascript Interface

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);
  }

}

添加:

//...

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

//...

JS

window.application.setMyFunction(function(){
        //some code here...
});

注意: JS传递函数需要采用这种形式,而不是字符串或json。

但实际上,在setMyFunction我得到"undefined"但期望为"window.application.setMyFunction(function(){ //some code here...});" 告诉我该怎么办,我将不胜感激!

试试这个:

将Javascript对象(包括函数)转换为字符串

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

function(){
..
}()

并在该字符串上调用eval()

为了解决此问题,当将函数传递为null时,我们需要声明将要作为字​​符串发送js函数到JS Interface函数。

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 Interface setMyFunctionAsString

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

现在,最后,当我们这样做时:

window.APPLICATION.setMyFunction(function(){
        //some code here...
});

我们将拥有"window.APPLICATION.setMyFunction(function(){\\n//some code here...\\n});" myFunction ,可以像这样轻松地调用它:

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

我希望这会帮助某人=)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM