![](/img/trans.png)
[英]How to pass a spring form as an argument to ajax call through javascript function?
[英]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...});"
。 告诉我该怎么办,我将不胜感激!
为了解决此问题,当将函数传递为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.