Android webView使用详解(Cookies)
来源:互联网 发布:彩色电纸书 知乎 编辑:程序博客网 时间:2024/06/07 12:35
前段时间的项目关系一直在和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是重头戏,很多自定义的逻辑控制功能都要借助这个类来实现。//定义一个新的WebViewClientprivate 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) { }
阅读全文
0 0
- Android webView使用详解(Cookies)
- android webview cookies使用总结
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android webview使用详解
- Android WebView使用详解
- Linux.ext4文件系统.inode和extent
- 自定义枚举
- 疯狂Java讲义里面的小游戏
- 清除浮动
- 快速上手Eclipse Eclipse快捷键指南
- Android webView使用详解(Cookies)
- JavaScript进阶设计模式系列——基础篇——闭包(1)--闭包和作用域
- 分享一下Edit Text动态获取字数的方法
- Linux下如何编译并运行C程序
- 动态添加权限
- 如何对分库后的数据进行分页查询?
- 计算机网络实验ns2实验
- python机器学习day'2
- Windows Server2008 修改MySQL默认数据路径