
原生webview和javascript交互
javascript调用原生提供方法
- 从API19开始,Android提供了@JavascriptInterface对象注解的方式来建立起Javascript对象和Android原生对象的绑定,提供给JavScript调用的函数必须带有@JavascriptInterface。以下方式基于api19以后
- 使用方式及流程:
- 1,@JavascriptInterface注解;
- 2,注册JavaScriptInterface;
- 3,调用,如window.android.show("JavaScript called~!");
@javascriptInterface,无返回值
@JavascriptInterface
public void show(String s){
Toast.makeText(getApplication(), s, Toast.LENGTH_SHORT).show();
}
webView.addJavascriptInterface(this, "android");
function toastClick(){
window.android.show("JavaScript called~!");
}
@javascriptInterface,有返回值
@JavaInterface
public String getMessage(){
return "Hello,boy~";
}
webView.addJavaScriptInterface(this,"Android");
function showHello(){
var str=window.Android.getMessage();
console.log(str);
}
WebView调用网页上的JavaScript代码
- 使用原生webview方法,loadUrl()
- webView.evaluateJavascript
webview方法loadUrl,需要在主线程中发起调用
webView.loadUrl("javascript:methodName(parameterValues)");
<script type="text/javascript">
function readyToGo() {
alert("Hello")
}
function alertMessage(message) {
alert(message)
}
function getYourCar(){
return "Car";
}
</script>
1. WebView调用JavaScript无参无返回值函数
String call = "javascript:readyToGo()";
webView.loadUrl(call);
2. WebView调用JavScript有参无返回值函数
String call = "javascript:alertMessage(\"" + "content" + "\")";
webView.loadUrl(call);
3. WebView调用JavaScript有参数有返回值的函数,使用webView.evaluateJavascript
@TargetApi(Build.VERSION_CODES.KITKAT)
private void evaluateJavaScript(WebView webView) {
webView.evaluateJavascript("getYourCar()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("findCar",s);
}
});
}