我如何调用javascript函数并从javascript函数获取返回值

ilo*_*ali 7 javascript android

我想从我的Java Android上的JS函数中获取值

样品,

function getStringToMyAndroid(stringFromAndroid){
   var myJsString = "Hello World" + ;
   return myJsString;
}
Run Code Online (Sandbox Code Playgroud)

现在我想要调用函数getStringToMyAndroid("来自android的这个字符串")并在我的Android上获取返回的myJsString,所以我可以稍后在我的Android上使用myJsString ;

我知道我可以使用

WebView.loadUrl("javascript:getStringToMyAndroid('This string from android')")
Run Code Online (Sandbox Code Playgroud)

调用JS函数,但我想从JS函数中获取字符串或值

注意:我的Android运行在最小的SDK Android 3.0蜂窝上

Cod*_*gue 15

对于API级别<19,只有使用JavascriptInterface(我的首选方法,下面)或者劫持OnJsAlert方法并使用alert()对话框的解决方法.这意味着您不能将该alert()功能用于其预期目的.

视图:

WebView.addJavascriptInterface(new JsInterface(), "AndroidApp");
WebView.loadUrl("javascript:doStringToMyAndroid('This string from android')")
Run Code Online (Sandbox Code Playgroud)

JsInterface:

public class JsInterface() {
    @JavascriptInterface
    void receiveString(String value) {
        // String received from WebView
        Log.d("MyApp", value);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

function doStringToMyAndroid(stringFromAndroid){
   var myJsString = "Hello World" + ;
   // Call the JavascriptInterface instead of returning the value
   window.AndroidApp.receiveString(myJsString);
}
Run Code Online (Sandbox Code Playgroud)

但是在API Level 19+上,我们现在有了evaluateJavascript方法:

WebView.evaluateJavascript("(function() { return getStringToMyAndroid('" + myJsString + "'); })();", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
        Log.d("LogName", s); // Returns the value from the function
    }
});
Run Code Online (Sandbox Code Playgroud)