Android WebView 项目使用总结

作者: yangjingxuan | 来源:发表于2016-04-29 18:55 被阅读2167次

    由于前段时间的项目对WebView的使用较多,因此总结一下项目中WebView的使用使用过程,以及一些值得注意的地方

    WebView 在大部分的WebApp中使用相当广泛,处理好WebView也是一个WebApp的关键

    目前的WebView是基于webkit 内核浏览器并且封装在android 的sdk 当中,并且WebView包括以下几个功能

    • 1.加载网站url和加载本地html页面
    • 2.可以与JavaScript代码进行交互
    • 3.webview控件可以高度进行定制

    在WebView使用过程中应当注意一下几点

    1. 在AndroidManifest.xml 中添加网络访问权限
    <uses-permission android:name="android.permission.INTERNET" />
    
    1. 在WebView中有一个辅助类WebSettings,通过他管理WebView的一些状态以及插件
    // webview启用javascript支持 用于访问页面中的javascript
    webSettings.setJavaScriptEnabled(true);
    
    //设置WebView缓存模式 默认断网情况下不缓存
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    
    //断网情况下加载本地缓存
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}
    
    //让WebView支持DOM storage API
    webSettings.setDomStorageEnabled(true);
    
    //让WebView支持缩放
    webSettings.setSupportZoom(true);
    
    //启用WebView内置缩放功能
    webSettings.setBuiltInZoomControls(true);
    
    //让WebView支持可任意比例缩放
    webSettings.setUseWideViewPort(true);
    
    //让WebView支持播放插件
    webSettings.setPluginState(WebSettings.PluginState.ON);
    
    //设置WebView使用内置缩放机制时,是否展现在屏幕缩放控件上
    webSettings.setDisplayZoomControls(false);
    
    //设置在WebView内部是否允许访问文件
    webSettings.setAllowFileAccess(true);
    
    //设置WebView的访问UserAgent
    webSettings.setUserAgentString(WebViewUtil.getUserAgent(getActivity(), webSettings));
    
    //设置脚本是否允许自动打开弹窗
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
    // 加快HTML网页加载完成速度 
    if (Build.VERSION.SDK_INT >= 19) {   
        settings.setLoadsImagesAutomatically(true);
    } else {
        settings.setLoadsImagesAutomatically(false); 
    }
    
    // 开启Application H5 Caches 功能 
    settings.setAppCacheEnabled(true); 
    
    // 设置编码格式
    settings.setDefaultTextEncodingName("utf-8");
    

    3.当页面需要调用我们一些原生native的功能时候,可以通过我们自定义的JS接口去实现

    
    //设置WebView JavaScript接口可以供页面JS调用
    mWebView.addJavascriptInterface(new JsInterface(), AppUtil.KEY_JS_INTERFACE_NAME);
    

    通过下面定义接口中的方法,如果涉及到一些ui界面上的处理和操作的话,需要在主线程中进行

    //接口类
    public class JsInterface {   
        public JsInterface() {  
            @JavascriptInterface
            public void showToast(String msg, int delayType) {           
                Message message = new Message();
                message.what = SHOW_TOAST;
                message.arg1 = delayType;
                message.obj = msg;mHandler.sendMessage(message);
            }
        }
    }
    

    4.设定WebViewClient和WebChromeClient实现WebView更多功能

    通过设置WebViewClient获取页面标题与页面中连接跳转的处理

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            //可以获取到WebView的标题Title
            setTitle(view.getTitle());
            super.onPageFinished(view, url);
        }
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //WebVeiw中连接跳转进行处理跳转到新的Activity
            if (WebIntentUtil.isDetailsPage(url)) {
                Intent intent = new Intent(EmbeddedBrowserActivity.this, DetailsActivity.class);
                intent.putExtra(BbsServerUtil.KEY_URL, url);
                startActivity(intent);
                return true;
            } else {
                return super.shouldOverrideUrlLoading(view, url);
            }
        }
    });
    

    待续

    由于WebChromeClient的功能较多,所以分为两部分
    将一起在下篇与WebView的WebChromeClient一起讲解
    WebChromeClient常用API与功能使用详解

    相关文章

      网友评论

      • thisfeng:这几天在搞这块,刚发现简述这个新圣地可以查到那么多新的资料总结,感谢分享
      • windgod:沙发...

      本文标题:Android WebView 项目使用总结

      本文链接:https://www.haomeiwen.com/subject/ciahrttx.html