首先写一个JS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Android和JS的交互 </title>
<meta charset="utf-8">
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script type="text/javascript">
function callJS(){
alert("弹出对话框");
}
function testconfirm(){
var r= confirm("您确定要离开么?");
alert(r);
}
function testprompt(){
var name = prompt("请输入用户名","admin");
alert(name);
}
function callandroid(){
var n = window.qinlin.callFromJS("侯志阳");
alert(n);
}
</script>
</head>
<body>
<input type="button" value="按钮一" onClick="callJS()"/>
<input type="button" value="按钮二" onClick="testconfirm()"/>
<input type="button" value="按钮三" onClick="testprompt()"/>
<input type="button" value="按钮四" onclick="callandroid()"/>
<br>
<font color="red" size="5">生者为过客,死者为归人。</font>
<br>
<font color="green" size="5">天地一逆旅,同悲万古尘。</font>
</body>
</html>
下面是主函数的调用
package com.animee.day16;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class WebJSActivity extends AppCompatActivity {
private WebView mWebView;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_js);
mWebView = (WebView) findViewById(R.id.web_js);
WebSettings webSettings = mWebView.getSettings();
// 设置与Js交互的权限
webSettings.setJavaScriptEnabled(true);
// 设置允许JS弹窗
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
mWebView.loadUrl("file:///android_asset/myjs.html");
// 由于设置了弹窗检验调用结果,所以需要支持js对话框
// webview只是载体,内容的渲染需要使用webviewChromClient类去实现
mWebView.setWebChromeClient(new WebChromeClient());
// 让此界面当中的webview的js调用android的代码
mWebView.addJavascriptInterface(new LocalJavaScript(this),"qinlin");
}
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_js:
// 在android当中调用js代码的方法
// 第一种方法(常用的)
// mWebView.loadUrl("javascript:callJS()");
// 第二种方法 (效率高的)
mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.i("Tag11","value=="+value);
}
});
break;
}
}
}
这是JS调用安卓的代码
package com.animee.day16;
import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast;
/**
* Created by Administrator on 2017/11/16.
*/
public class LocalJavaScript {
private Context context;
public LocalJavaScript(Context context) {
this.context = context;
}
// 在js当中调用以下方法,需要加注解@JavascriptInterface
@JavascriptInterface
public String callFromJS(String str){
Toast.makeText(context,str+"不要看洛克王国,嗯哼!!",Toast.LENGTH_LONG).show();
return "abcdefg";
}
}