Android之WebView
文章目录
1. WebVIew的功能
1.显示一个网页
2.混合开发,于JavaScipt交互
2.WebView的使用前提
因为在Android程序中打开网页肯定是需要网的嘛,所以一定不能忘了添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
3.WebVIew的使用
3.1打开一个网页
我们以打开百度为例
WebView webView = findViewById(R.id.web_view);
//让webView支持JavaScript脚本
webView.getSettings().setJavaScriptEnabled(true);
//这行可加可不加,加上的话,在当前的网页打开二级网页时,还是显示在WebView上,
//如果不加的话,则会在浏览器上去显示新的页面。
webView.setWebViewClient(new WebViewClient());
//根据URl去加载页面
webView.loadUrl("https://www.baidu.com");
3.2 WebView和JavaScript的交互
3.2.1 Android调用JavaScip
webView.loadUrl("file:///android_asset/tian1.html");
Button button = findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "调用了JavaScript的方法", Toast.LENGTH_SHORT).show();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
//在调用JavaScript中的方法时需要提前给WebVIew传入网页的url,这样它才能知道调用的哪一个 JavaScript的方法
webView.loadUrl("javascript:XY.show ('iasdasd')");
}
});
}
});
}
javascript:XY.show(‘iadasd’) 这个是JavaScript的伪协议,意思是我调用了该HTML页面的Window对象下的XY对象的show方法
关于这个伪协议中的的show方法的参数 ‘"+info+"’ 和 'info’的区别
第一个info代指一个叫做info的变量,第二个Info代指一个info字符串
3.2.2 JavaScip调用Android
webView.addJavascriptInterface(new JSHook(), "hello");
这个JSHook对象中包含着要交给js方法,注意要交给js的方法一定要加 @JavascriptInterface注解,否则会在Android 4.4以上的版本抛异常。
注意:因为交给js的方法的执行线程和Android的主线程不是一个线程,所以如果你想在js调用的方法中改变安卓活动的页面,必须要使用 MainActivity.this.runOnUiThread在主线程进行。
class JSHook {
@JavascriptInterface
public void javaMethod(String p) {
Log.d("tag", "JSHook.JavaMethod() called! + " + p);
}
@JavascriptInterface
public void showAndroid() {
final String info = "来自手机内的内容!!!";
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:show('" +info+ "')");
}
});
}
public String getInfo() {
return "获取手机内的信息!!";
}
}