当前位置:   article > 正文

webview的用法_盖webview默认使用第三方或系统默认浏览器打开网页的行为,使网页用webview打开

盖webview默认使用第三方或系统默认浏览器打开网页的行为,使网页用webview打开
  
正常的网络访问中直接按照url地址访问
String url=intent.getExtras().getString("url");
        webView.getSettings().setJavaScriptEnabled(true);
//        webView.loadUrl("http://docs.google.com/gview?embedded=true&url="+url);
        webView.loadUrl(url);

        //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                view.loadUrl(url);
                return true;
            }
        });
  1. //打开本包内asset目录下的index.html文件
  2. wView.loadUrl(" file:///android_asset/index.html ");
//打开本地sd卡内的index.html文件
wView.loadUrl(" file:///sdcard/index.html "); 

 关于解析

 webView.loadUrl("http://docs.google.com/gview?embedded=true&url="+url);

由于谷歌推出中国大陆市场,导致谷歌提供的在线解析接口无法使用

那么,是不是webview就无法做到在线展示doc等办公文件了呢,no

 

https://view.officeapps.live.com/op/view.aspx?src=http://618410.user-website9.com/003.docx

此接口由微软提供,作用和谷歌接口相识,可借用此接口来在线解析

那么此处存在隐藏问题,经此接口解析后,此url地址变成了https,那么我们作何处理呢

2访问https

Android中,WebView是用来load httphttps网页到本地应用的控件。在默认情况下,通过loadUrl(String url)方法,可以顺利load。但是,当loadssl层的https页面时,如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像PC浏览器中那样跳出一个风险提示框。因此,我们必须针对这种情况进行处理。(这个证书限于2.1版本以上的Android 系统才可以)

webView.setWebViewClient(new WebViewClient() {

public void onReceivedSslError(WebView view,

SslErrorHandler handler, SslError error) {

// //handler.cancel(); 默认的处理方式,WebView变成空白页

handler.proceed(); // 接受证书

// handleMessage(Message msg); 其他处理

}

});

// 这两行代码一定加上否则效果不会出现 webView.getSettings().setJavaScriptEnabled(true);

webView.getSettings().setDefaultTextEncodingName("gb2312");

webView.loadUrl(<a target=_blank href="https://xxxxxxxx">https://xxxxxxxx</a>);

 

查看Android浏览器源码在TabControl.Java类中SubWindowClient方法中找,如果只是简单的接受所有证书的话,就直接调process()方法就行了

 

3有时候我们我们需要WebView能够实现超链接的功能。

我们可以调用setWebViewClient()方法试着WebView的客户端,

此时我们只要重写一下WebViewClient类下的

public boolean shouldOverrideKeyEvent (WebView view, KeyEvent event)就可以了

       源代码如下:

private class myWebViewClient extends WebViewClient { 

    @Override 

public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { 

webView.loadUrl(URL); 

return true; 

 } 

4考虑到网页的加载速度,我们可以调用setWebChromeClient()方法

   我们此时只要重写一下WebChromeClient类中的

public void onProgressChanged (WebView view, int newProgress)来显示页面的加载进度,实例代码如下:

webview.setWebChromeClient(new WebChromeClient() { 

 @Override 

public void onProgressChanged(WebView view, int newProgress) { 

            if (newProgress == 100) { 

                handler.sendEmptyMessage(CLOSE_DIA); 

            } 

            super.onProgressChanged(view, newProgress); 

        } 

    }); 

    代码中用到了handlr,  此时如果加载进度=100的时候,发个消息给     handler  然后进行处理

5如果希望浏览的网页后退而不是退出浏览器,需要WebView覆盖URL加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站点。

//改写物理按键——返回的逻辑   

 @Override

    public boolean onKeyDown(int keyCode, KeyEvent event) {

        // TODO Auto-generated method stub

        if(keyCode==KeyEvent.KEYCODE_BACK)

        {

            if(webView.canGoBack())

            {

                webView.goBack();//返回上一页面

                return true;

            }

            else

            {

                System.exit(0);//退出程序            }

        }

        return super.onKeyDown(keyCode, event);

    }

 

 

6缓存

优先使用缓存

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

不使用缓存:

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/308988
推荐阅读
相关标签
  

闽ICP备14008679号