Android webView使用详解(Cookies)
2017-06-26 15:04
387 查看
前段时间的项目关系一直在和android的webview打交道,网上查了很多资料,发现关于webview的详细介绍都比较少,于是决定自己做个小总结。当然因为本人比较懒的缘故,可能这个总结也不会做的太全面,要想详细了解webview的话还是推荐直接去看Android Developer官方网站给的API文档,我在这里只是粗略介绍一下要想开发一个完整的webview需要用到的一些主要的class,以及提一下在使用webview时需要注意的一些point。 关于Webview几个比较重要的class是WebView, WebSettings, WebViewClient以及CookieManager。 WebView类就相当于一个小型浏览器,使用它就可以根据URL浏览某个网页;但在使用webview之前我们需要先对webview做一些基本的全局配置,这就需要用到WebSettings。然后WebViewClient相当于WebView这个简易浏览器的内核,设置黑白名单,对特定URL,scheme采取哪种响应方式,操作cookie都在(应该在)这个类里面进行相应方法的重载实现。这里不得不吐一下槽就是Android的CookieManager略难用,使用它去获得cookie时,只能得到所有cookie的“key=value”字符串,cookie的有效时间,domain啥的一律取不到,要想取得Cookie对象的话貌似目前只能通过HttpClient(具体我没实践过)。下面是示例代码,具体代码意义请看注释。 //假设你已经在Activity或者Fragment对应的layout文件中定义了一个id为webview的WebView组件。 WebView webview = (WebView) findViewById(R.id.webview); //设定webview的useragent,这个主要用来服务器端进行验证,如果server端没有特殊要求的话可以不用管。 webview.getSettings().setUserAgentString("string"); WebSettings webViewSetting = webview.getSettings(); //下面这两行代码让webview在打开网页时自动进行大小匹配,让网页大小fit上屏幕大小 webview.getSettings().setUseWideViewPort(true); webview.getSettings().setLoadWithOverviewMode(true); //设置webview支持放大缩小功能,try部分的代码可能难理解,这是为了消去我们用手指进行放大缩小时屏幕中出现的“放大缩小按钮” webview.getSettings().setBuiltInZoomControls(true); webview.getSettings().setSupportZoom(true); try { Field webViewField = webViewSetting.getClass() .getDeclaredField("mBuiltInZoomControls"); webViewField.setAccessible(true); webViewField.set(webViewSetting, false); } catch (Exception e) { e.printStackTrace(); webViewSetting.setBuiltInZoomControls(false); } webview.setWebViewClient(newWebViewClient); //WebViewClient是重头戏,很多自定义的逻辑控制功能都要借助这个类来实现。 //定义一个新的WebViewClient private WebViewClient newWebViewClient = new WebViewClient() { @Override //这个函数用来决定每当webview打开一个新的URL时的动作, //return true的话表示webview不会继续对URL进行操作,此时你需要指定来对该URL进行操作的应用或是其他组件; //如果不指定,直接返回true的相当于该条URL不响应; //return false的话表示webview会继续对该URL进行处理。 //如果要对特定的domain进行限定,也就是我们说的黑白名单, //就需要重载这个方法,判断URL是否需要过滤,然后直接返回true public boolean shouldOverrideUrlLoading( final WebView view, final String url) { for (int k = 0; k < blockList.length; k++) { if (url.contains(blockList[k])) { return true; } } if (url.startsWith("http://")) { return false; } else if (url.startsWith("https://")) { return false; return true; } /** * 之前我在使用webview时出现了当打开https的link时webview一片空白的情况 * 网上查了一下,说是重载这个函数并让他返回handler.proceed()就行。 * 试了之后确实可以解决问题,但这样子存在安全隐患。 * 因为这个函数的意思是忽略HTTPS错误,即当出现HTTPS错误,比如最常见的 * 没有签名的安全错误,webview也还是照样打开该网站,这就让钓鱼网站有机可乘, * 所以一般做法时当出现HTTPS错误时,调用cancel()终止网页继续载入。 * 那如何解决HTTPS链接空白的问题呢?参考上面shouldOverrideUrlLoading()的定义 */ @Override public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) { //handler.proceed(); handler.cancel(); } @Override //当发生了HTTP错误,比如404错误啊,503错误啊等就调用这个函数, //可以在这里获得errorCode并对errorCode进行对应处理 public void onReceivedError(final WebView view, final int errorCode, final String description, final String url) { } /** * 打开一个URL时会被调用的函数,在这里可以进行一些初始化操作,比如载入cookie等 */ @Override public void onPageStarted(final WebView view, final String url, final Bitmap favicon) { URL realUrl; try { realUrl = new URL(url); host = realUrl.getHost(); domain = host.substring(host.indexOf(".")); } catch (MalformedURLException e) { e.printStackTrace(); } CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); //注意我们在set cookie时不能直接针对URL进行cookie的set操作,而是应该要针对该URL的domain来进行设置 //domain的格式一定为".google.com"类似。 cookieManager.setCookie(domain, cookieKeyName); if (cookieManager.hasCookies()) { //但是在获取cookie时使用的参数是url,这里的区别要注意 String cookies = cookieManager.getCookie(url); } } /** * 当网页载入完毕时一定会调用的函数,可以在这里进行一些参数保存操作 */ @Override public void onPageFinished(final WebView view, final String url) { }
相关文章推荐
- Android——WebView组件的使用详解
- Android学习 - WebView组件的使用详解
- 把网页加载进安卓显示,及其android系统webview控件使用详解
- Android webview使用详解
- Android开发_WebView组件使用详解_LoadUrl直接显示网页内容
- Android开发之WebView组件的使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android WebView属性使用详解
- Android客户端开发即WebView组件的使用详解
- Android webview使用详解
- Android webview使用详解
- Android开发之WebView组件的使用详解
- Android webview使用详解
- Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结
- Android学习指南之二十九:WebView使用详解
- Android webview使用详解
- 基于Android中Webview使用自定义的javascript进行回调的问题详解
- Android——WebView组件的使用详解