WebView项目实战应用汇总

WebView基本使用

activity_main.xml

<WebView
    android:id="@+id/wv_test"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

1、加载网页、刷新网页、前进、后退在xml文件中

在java代码中:

WebView wvTest = (WebView)findViewById(R.id.wv_banner);
//加载网络网页
wvTest.loadUrl("http://www.baidu.com");
//加载本地网页
wvTest.loadData("file:///android_asset/refresh/refresh.html");
//返回上个页面
if(wvTest.canGoBack()){
  wvTest.goBack();
}
//去刚才浏览的页面
if(wvTest.canGoForward()){
  wvTest.goForward();
}
//刷新当前页面
wvTest.reload();

2、设置一些参数注:

最后一条在加载含有Html5新标签的网页的时候需要加上这句话

WebSettings settings = wvTest.getSettings();
settings.setJavaScriptEnabled(true);//支持javascript
settings.setUseWideViewPort(true);//适配屏幕
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);//支持放大缩小
settings.setDisplayZoomControls(false);//隐藏放大缩小的按钮
settings.setDomStorageEnabled(true);//支持Html5标签
3、获取网页标题
class MyWebViewChromeClient extends WebChromeClient{
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        L.D("title就是网页标题:" + title);
    }
}
wvTest.setWebChromeClient(new MyWebViewChromeClient());

4、下载文件
wvTest.setDownloadListener(new DownloadListener() {
    @Override
    public void onDownloadStart(String url, String userAgent,
                    String contentDisposition, String mimetype, long contentLength) {
        //需要下载的文件的地址就是url,及可以下载文件       
    }
});

调用系统浏览器去下载文件(updateUrl是下载地址):

Intent intent= new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(updateUrl);
intent.setData(content_url);  
startActivity(Intent.createChooser(intent, "请选择浏览器"));    

5、WebView错误码处理就在网页加载失败、没有网络的情况下WebView会把加载的网页地址显示出来。为了避免这种情况,我们需要做如下处理:
class MyWebViewClient extends WebViewClient{
    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
                    //在这里进行加载错误、没有网络情况的处理
                    //方式1:加载一个本地的默认页面
                    wvTest.loadData("file:///android_asset/refresh/refresh.html");
                    //方式2:显示一个默认布局
                    tvDefault.setText("网页加载失败");
                    wvTest.setVisibility(View.GONE);
    }
}
wvTest.setWebViewClient(new MyWebViewClient());

6、和JavaScript交互(简单的调用、传值)Java代码:
//被javascript调用的类
class CalledByJs {
    private Context mContext;
    public CalledByJs(Context context){
        this.mContext = context;
    }
//在js中被调用的方法
    @JavascriptInterface
    public void callFromJs(){
        Toast.makeText(mContext, "js调用啦~", Toast.LENGTH_LONG).show();
    }
}

settings.setJavaScriptEnabled(true);
wvTest.addJavascriptInterface(new CalledByJs(this), "demo");
JavaScript代码:function call(){
    demo.callFromJs();
}
<img src="img/refreshicon.png" onclick="call()" alt="轻触屏幕重新刷新" />

js和java交互全集合

7、WebView自定义拦截@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
  if(!TextUtils.isEmpty(url)){
    if("open_login".equals(url)){
        Intent intent = new Intent(this,LoginActivity.class);
        startActivity(intent);
        return true;
    }else {
        return false;
    }
  }
  return super.shouldOverrideUrlLoading(view, url);
}

返回值:

返回true
webview处理url是根据程序来执行的。即:如果返回为true,即不再会通过webview加载,而是执行你写的拦截的程序,如果没有的话就不执行(不执行就是,内容有href,超链接也不会跳转了)
返回false
webview处理url是在webview内部执行。返回false的话就可以执行内容的超链接跳转。

8、获取Web页面的标题,显示Web加载进度其中显示Web页面加载进度有两种方式:
class MyChromeClient extends WebChromeClient{
    //获取Web页面标题
    @Override
    public void onReceivedTitle(WebView view, String title) {
        title(title);
        if(TextUtils.isEmpty(shareDesc)){
            shareDesc = title;
            shareTitle = title;
        }
    }

//显示Web页面加载进度 方式1:

 @Override
    public void onProgressChanged(WebView view, int newProgress){
         if (newProgress == 100) {
             pbWebLoad.setVisibility(View.GONE);
         } else {
             if (View.GONE == pbWebLoad.getVisibility()) {
                 pbWebLoad.setVisibility(View.VISIBLE);
             }
             pbWebLoad.setProgress(newProgress);
         }
         super.onProgressChanged(view, newProgress);
    }
}




//显示Web页面加载进度 方式2:

private class MyWebViewClient extends WebViewClient{
@Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        //弹Loading框进行加载
    }
    
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        //消失Loading框,加载完毕
    }
}

9、清空WebView缓存
/**
 * WebView清空缓存
 */
public static void clearCache(Context context) {
    CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(context);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
    context.deleteDatabase("webview.db");
    context.deleteDatabase("webviewCache.db");
    context.deleteDatabase("webviewCookiesChromium.db");
    context.deleteDatabase("webviewCookiesChromiumPrivate.db");
    //WebView 缓存文件  
    File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath()+"/webviewCacheChromium");  
    //删除webview 缓存目录  
    if(webviewCacheDir.exists()){  
        deleteFile(webviewCacheDir);  
    }  
}



10、访问https地址
wvTest.setWebViewClient(new WebViewClient(){
        @Override
        public void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {
            super.onReceivedSslError(view, handler, error);
            //handler.cancel(); // Android默认的处理方式
            handler.proceed();  // 接受所有网站的证书
            //handleMessage(Message msg); // 进行其他处理
        }
    });
11、WebView加载HTML代码

loadDataWithBaseURL方法:

loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String historyUrl)

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;  
public class ViewHtml extends Activity {  
WebView show;    
@Override  
protected void onCreate(Bundle savedInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView(R.layout.activity_view_html);    
//获取程序中的WebView组件    
show = (WebView) findViewById(R.id.show);    
StringBuilder sb = new StringBuilder();    
//拼接一段HTML代码    
sb.append("<html>");    
sb.append("<head>");    
sb.append("<title>Our Love</title>");    
sb.append("</head>");    
sb.append("<body>");    
sb.append("<h2>Love<a href=\"http://love.shiningchen.cc\">"+"Shining</a></h2>");    
sb.append("</body>");    
sb.append("</html>");    
//使用简单的loadData方法会导致乱码,可能是Android API的Bug    
//show.loadData(sb.toString(), "text/html", "utf-8");    
//加载、并显示HTML代码    
show.loadDataWithBaseURL(null,sb.toString(), "text/html", "utf-8", null);  
}}
12.WebView中JS 调用Android方法

三个步骤:

  • 调用WebView关联的WebSettings的setJavaScriptEnabled(true)启用js调用功能。
  • 调用WebView的addJavascriptInterface(Object object, String name)方法将Object对象暴露给js。
  • 在js脚本中通过刚才暴露的name的对象调用android方法。
13.js与android交互总结

https://blog.csdn.net/qiuqi12/article/details/79073672

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值