美文网首页
android开发中,webview常用于显示网页或h5页面,一

android开发中,webview常用于显示网页或h5页面,一

作者: 欧阳峰_oyf | 来源:发表于2017-09-05 15:31 被阅读0次

    1.跨域cookie读取

    什么是跨域,简单的说就是不同的域名,我们都知道在pc上我们用浏览器访问网址,不同的网址都会在本地存储一些cookie信息,这样就可以实现比如自动登录等功能,在pc上不同域名是不能相互读取其他域下的cookie信息的(非web专业开发人员,如果理解有误,欢迎指出)。

    但是在android上在api 23之前,是可以跨域读取cookie的,比如A域写入一个userId的cookie,B域可以读取该值。但是在23时,系统将该值设置成了false,不再让跨域读取了。如果你的应用有跨域读取需求,怎么办?可以采用如下方式进行开启:

    /*** 设置跨域cookie读取*/

    public final void setAcceptThirdPartyCookies() {

    //target 23 default false, so manual set true

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true);       

    }  

    }

    2.http/https混合加载

    在现阶段,很多网站都改成了https进行访问,https可以提升访问网站的安全性,防止信息被窃取,如果所有的网页都是https且网页内的链接也是都是https,那就没有混合加载(文本区域https,图片文件http加载)的问题了。但是很多资源现阶段还没有改变成https访问,往往页面都嵌入了http的链接。这种混合网页如果不进行处理,直接加载是会出现错误的。怎么解决这个问题?

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

    }

    这也是一个分版本的函数,在api23之前,默认是可以混合加载的,但是在23时,默认值改成了MIXED_CONTENT_NEVER_ALLOW,因此如果你有混合加载的需求,设置setMixedContentMode为MIXED_CONTENT_ALWAYS_ALLOW。

    3.无法解决跨域访问问题,可以尝试给webview设置如下配置,已解决该问题;

    if (Build.VERSION.SDK_INT >= 16) {

    Class clazz =webView.getSettings().getClass();

    Method method = clazz.getMethod("setAllowUniversalAccessFromFileURLs", boolean.class);

    if (method != null) {

    method.invoke(webView.getSettings(), true);

    }

    }

    } catch (IllegalArgumentExceptione) {

    e.printStackTrace();

    } catch (NoSuchMethodException e) {

    e.printStackTrace();

    } catch (IllegalAccessException e) {

    e.printStackTrace();

    } catch (InvocationTargetException e) {

    e.printStackTrace();

    }

    相关文章

      网友评论

          本文标题:android开发中,webview常用于显示网页或h5页面,一

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