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(BuildVERSIONSDK_INT >= BuildVERSION_CODESLOLLIPOP) { CookieManagergetInstance()setAcceptThirdPartyCookies(webView,true);
}
}
2http/https混合加载
在现阶段,很多网站都改成了https进行访问,https可以提升访问网站的安全性,防止信息被窃取,如果所有的网页都是https且网页内的链接也是都是https,那就没有混合加载(文本区域https,文件http加载)的问题了。但是很多资源现阶段还没有改变成https访问,往往页面都嵌入了http的链接。这种混合网页如果不进行处理,直接加载是会出现错误的。怎么解决这个问题?
if (BuildVERSIONSDK_INT >= BuildVERSION_CODESLOLLIPOP) {
webSettingssetMixedContentMode(WebSettingsMIXED_CONTENT_ALWAYS_ALLOW);
}
这也是一个分版本的函数,在api23之前,默认是可以混合加载的,但是在23时,默认值改成了MIXED_CONTENT_NEVER_ALLOW,因此如果你有混合加载的需求,设置setMixedContentMode为MIXED_CONTENT_ALWAYS_ALLOW。
3无法解决跨域访问问题,可以尝试给webview设置如下配置,已解决该问题;
if (BuildVERSIONSDK_INT >= 16) {
Class clazz =webViewgetSettings()getClass();
Method method = clazzgetMethod("setAllowUniversalAccessFromFileURLs", booleanclass);
if (method != null) {
methodinvoke(webViewgetSettings(), true);
}
}
} catch (IllegalArgumentExceptione) {
eprintStackTrace();
} catch (NoSuchMethodException e) {
eprintStackTrace();
} catch (IllegalAccessException e) {
eprintStackTrace();
} catch (InvocationTargetException e) {
eprintStackTrace();
}
以上就是关于android开发中,webview常用于显示网页或h5页面,一个遇到跨域方面的坑。全部的内容,包括:android开发中,webview常用于显示网页或h5页面,一个遇到跨域方面的坑。、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)