您的位置:首页 > 移动开发 > Android开发

android :WebView与JS交互及使用场景

2018-01-04 13:23 585 查看
1,js调用java方法使用场景:一般是自家的html页面需要拿到java里的一些数据,比如说本地的一些html页面模板要拿到app的用户id等等获取WebView对象调用WebView对象的getSettings()方法,获取WebSettings对象调用WebSettings对象的setJavaScriptEnabled()方法,设置js可用,参数:布尔值在判断是否支持js的时候,不要用alert(),默认不起作用,可以先用document.write()测试调用WebView对象的addJavascriptInterface(obj, interfaceName)方法,添加js接口,参数:Object对象,String接口名称(这个对象在js中的别名)定义一个内部类MyJavascript定义一个方法showToast(),显示吐司,api版本大于17需要加注解@JavascriptInterfacejava代码:package com.tsh.mywebview;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends Activity {
private WebView webview;
private ProgressDialog pd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
pd=new ProgressDialog(this);
pd.setMessage("正在加载...");
//webview的简单设置
webview=(WebView) findViewById(R.id.wv_internet);
//http://100.65.187.106/test.php
webview.loadUrl("http://100.65.187.106/test.php");
WebSettings websettings=webview.getSettings();
websettings.setSupportZoom(true);
websettings.setBuiltInZoomControls(true);
//js交互
new MyJavascript().showToast("111");
websettings.setJavaScriptEnabled(true);
webview.addJavascriptInterface(new MyJavascript(), "Android");
webview.loadUrl("javascript:documentWrite('测试')");
webview.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
pd.show();
}
@Override
public void onPageFinished(WebView view, String url) {
pd.dismiss();
}
});
}
//暴露给js的功能接口
public class MyJavascript{
//显示吐司
// 如果target 大于等于API 17,则需要加上如下注解
@JavascriptInterface
public void showToast(String text) {
Toast.makeText(MainActivity.this, text, 1).show();
}
//显示loading
@JavascriptInterface
public void showProgressDialog(String text) {
pd.setMessage(text);
pd.show();
}
}
//后退键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK&&webview.canGoBack()){
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
//菜单键
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "刷新");
menu.add(0, 0, 1, "后退");
menu.add(0, 0, 2, "前进");
return super.onCreateOptionsMenu(menu);
}
//菜单点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getOrder()) {
case 0:
webview.reload();
break;
case 1:
if(webview.canGoBack()){
webview.goBack();
}
break;
case 2:
if(webview.canGoForward()){
webview.goForward();
}
break;
}
return super.onOptionsItemSelected(item);
}
}
js代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>测试android程序</title>
</head>
<body>
测试android和js交互
<br/>
<button onClick="showToast()">显示吐司</button>
<br/>
<button onClick="showProgressDialog()">显示loading</button>
<script type="text/javascript">
function showToast(){
Android.showToast("显示吐司");
}
function showProgressDialog(){
Android.showProgressDialog("显示进度条");
}
</script>
</body>
</html>试试点击两个html的按钮是不是回调java方法成功了
2,java调用js方法使用场景:一般是在java里要控制自家html页面的显示播放等,给html发指令调用 形式:
mWebView.loadUrl("javascript:wave()");
其中wave()是js中的一个方法,当然你可以把这个方法改成其他的方法,也就是android调用其他的方法。3,java在html注入js方法并调用使用场景:一般是想要控制别人家的html页面的展示情况,比如加载一个网页,网页有广告,我们要去掉这个广告就可以通过注入js的方式来实现使用方式和调用js方法一样,只是是执行的一段js代码:示例public static String getClearAdDivJsBYId(String divId) {//获取js代码
String js = "javascript:";
js += "var adDiv= document.getElementById('" + divId + "');if(adDiv!=null)adDiv.parentNode.removeChild(adDiv);";
}
return js;}注入js去掉别人家html页面里id为adContent的div:
mWebView.loadUrl(getClearAdDivJsBYId("adContent"));

这样就可以把别人家html页面里的广告给去掉了,是不是很简单!

以上就是java和js的交互方式总结,能达到不同的效果

另外本人喜欢看视频,看直播,附上本人用X5内核开发的一个小工具,可以看腾讯,爱奇艺和各大直播平台,真心不想再手机上装太多东西,有兴趣的朋友可以扫码下载研究一下



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: