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

时间:2014-08-01 07:18:24

标签: javascript android

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

样品,

function getStringToMyAndroid(stringFromAndroid){
   var myJsString = "Hello World" + ;
   return myJsString;
}

现在我想调用函数 getStringToMyAndroid(&#34;来自android&#34的这个字符串;)并在我的Android上获得返回的 myJsString ,所以我可以使用<稍后在我的Android上使用strong> myJsString ;

我知道我可以使用

WebView.loadUrl("javascript:getStringToMyAndroid('This string from android')")

调用JS函数但我想从JS函数

获取字符串或值

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

1 个答案:

答案 0 :(得分:15)

对于API级别&lt; 19只有使用JavascriptInterface(我的首选方法,下面)或者劫持OnJsAlert方法并使用alert()对话框的解决方法。这意味着您无法将alert()函数用于其预期目的。

查看:

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

<强> JsInterface:

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

<强>使用Javascript:

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

但是在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
    }
});