如何调用javascript函数并从javascript函数获取返回值
我想从Java Android上的JS函数中获取值 样本如何调用javascript函数并从javascript函数获取返回值,javascript,android,Javascript,Android,我想从Java Android上的JS函数中获取值 样本 function getStringToMyAndroid(stringFromAndroid){ var myJsString = "Hello World" + ; return myJsString; } 现在我想调用函数getStringToMyAndroid(“来自android的此字符串”),并在我的android上获取返回的myJsString,以便以后在我的android上使用myJsString 我知道我可
function getStringToMyAndroid(stringFromAndroid){
var myJsString = "Hello World" + ;
return myJsString;
}
现在我想调用函数getStringToMyAndroid(“来自android的此字符串”),并在我的android上获取返回的myJsString,以便以后在我的android上使用myJsString
我知道我可以用
WebView.loadUrl("javascript:getStringToMyAndroid('This string from android')")
调用JS函数,但我想从JS函数中获取字符串或值
注意:我的android运行在minimum SDK android 3.0 honeycomb上,API级别<19时,只有使用JavascriptInterface(下面是我的首选方法)或劫持OnJsAlert方法并使用
alert()
对话框的变通方法。这意味着您不能将alert()
函数用于其预期用途
查看:
WebView.addJavascriptInterface(new JsInterface(), "AndroidApp");
WebView.loadUrl("javascript:doStringToMyAndroid('This string from android')")
public class JsInterface() {
@JavascriptInterface
void receiveString(String value) {
// String received from WebView
Log.d("MyApp", value);
}
}
function doStringToMyAndroid(stringFromAndroid){
var myJsString = "Hello World" + ;
// Call the JavascriptInterface instead of returning the value
window.AndroidApp.receiveString(myJsString);
}
JsInterface:
WebView.addJavascriptInterface(new JsInterface(), "AndroidApp");
WebView.loadUrl("javascript:doStringToMyAndroid('This string from android')")
public class JsInterface() {
@JavascriptInterface
void receiveString(String value) {
// String received from WebView
Log.d("MyApp", value);
}
}
function doStringToMyAndroid(stringFromAndroid){
var myJsString = "Hello World" + ;
// Call the JavascriptInterface instead of returning the value
window.AndroidApp.receiveString(myJsString);
}
Javascript:
WebView.addJavascriptInterface(new JsInterface(), "AndroidApp");
WebView.loadUrl("javascript:doStringToMyAndroid('This string from android')")
public class JsInterface() {
@JavascriptInterface
void receiveString(String value) {
// String received from WebView
Log.d("MyApp", value);
}
}
function doStringToMyAndroid(stringFromAndroid){
var myJsString = "Hello World" + ;
// Call the JavascriptInterface instead of returning the value
window.AndroidApp.receiveString(myJsString);
}
但在API级别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
}
});
WebView.evaluateJavascript(((函数(){return getStringToMyAndroid(““+myJsString+”);})();”,new ValueCallback(){
@凌驾
公共void onReceiveValue(字符串s){
Log.d(“LogName”,s);//从函数返回值
}
});
你的目标是什么版本的Android?嗨@RGraham我使用的最低Android目标是API 11 Android 3.0蜂巢,谢谢:)嗨,谢谢你的代码和解释,我有一个问题是doStringToMyAndroid是JS的函数吗??loadUrl(“dostringtomyaroid('This string from android')”),谢谢,我现在就试试:)@ilovebali抱歉,是的,这是一个Javascript函数。替换你的getStringToMyAndroid
-我已经更新了代码以使其更清晰我尝试了你的代码但没有成功:(,我也尝试了使用使我的应用程序崩溃的最后一个代码:),我要做的是从JsInterface创建新的java类,并从我的webViewwebView.addJavascriptInterface(新的JsInterface(),“AndroidApp”)调用它; WebView.loadUrl(“javascript:dostringtomyaroid('This string from android')”)
,需要建议,谢谢:)您在类公共类JsInterface(){@JavascriptInterface void receiveString(string value){//string receivefrom WebView Log.d(“MyApp”,value);}}
您有“()”在类名之后,我删除了它,因为我得到了错误:(9,25)错误:“{”预期,然后我删除了类名中的“()”,我没有得到错误,但代码不工作,谢谢:)