android开发中,webview常用于显示网页或h5页面,一个遇到跨域方面的坑。

android开发中,webview常用于显示网页或h5页面,一个遇到跨域方面的坑。,第1张

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页面,一个遇到跨域方面的坑。、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9435433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存