如何在Javascript接口中将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接口
:
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端做。客户端需要执行一些语句,我想,无论如何,如果您想要自调用函数,请在末尾添加“()”。