缘由
最近在学H5开发,想了解Android调用JS的请移步Android调用 Webview的JS方法
代码
html设置
在src/main/下创建一个文件夹assets,里面添加一个javascript.html文件,内容如下;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>emperinter</title>
<script>
function callAndroid(){
// 由于对象映射,所以调用test对象等于调用Android映射的对象
// 这里的test即为 mWebView.addJavascriptInterface(new AndroidtoJs(),"test");的传参
// AndroidtoJS类对象映射到js的test对象
// hello即位我们写的接口
// 里面得参数即为我们要传递给Android得参数
test.hello("JS里面的参数");
}
</script>
</head>
<body>
<!--点击按钮则调用callAndroid函数-->
<div align="center">
<button class="font-size:32px;" type="button" id="button1" onclick="callAndroid()">调用安卓方法</button>
</div>
</body>
</html>
页面布局
java
- 接口
我准备在这里面添加一个EditText来尝试直观感觉,结果不行。看来自己类等等的知识得抽空补补了!
//继承自Objiect类
public class AndroidtoJs extends Object{
@JavascriptInterface
public void hello(String msg) {
//System.out.println("Js调用了Android的hello方法!");
System.out.println(msg);
}
}
- MainActivity
public class MainActivity extends AppCompatActivity {
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.MainWebView);
WebSettings webSettings = mWebView.getSettings();
//设置Jscript交互的权限
webSettings.setJavaScriptEnabled(true);
// 通过addJavascriptInterface()将Java对象映射到JS对象
// 参数1:Javascript对象名
// 参数2:Java对象名
mWebView.addJavascriptInterface(new AndroidtoJs(),"test");//AndroidtoJS类对象映射到js的test对象
// 加载JS代码
// 格式规定为:file:///android_asset/文件名.html
mWebView.loadUrl("file:///android_asset/javascript.html");
}
}