一、问题描述
最近修复一个日常开发很少遇到也很少会关注的问题,具体问题是在项目中接入了公司前端同事开发的H5页面,这个H5页面内部接入了第三方的页面(后面通过分析是以iframe方式嵌入H5页面的),从公司内部H5页面跳转到第三方页面时有些机型Cookie获取不到。具体现象如下图:
图1 内嵌页面没有携带Cookie
问题分析:当H5页面中使用iframe内嵌一个页面时,由于内嵌页面和外部页面域名不同,导致cookie存在跨域的问题,,因此内嵌的页面无法获取外部页面的Cookie,内嵌页面在请求时也就无法携带外面页面的cookie。
二、解决方法
通过查找资料发现CookieManager有接口设置可以解决cookie的跨域问题,具体是在Webview初始化时设置CookieManager.getInstance().setAcceptThirdPartyCookies(),代码设置如下:
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView,true);
}
官方文档对方法CookieManager.getInstance().setAcceptThirdPartyCookies(WebView webview, boolean accept)的说明:
英文:Sets whether the WebView should allow third party cookies to be set.
中文:设置WebView是否允许设置第三方的Cookie。
设置CookieManager.getInstance().setAcceptThirdPartyCookies()之后抓包结果如下图,可以看到内嵌页面的访问已经携带Cookie了。
图2 内嵌页面携带Cookie了如果感觉我的文章对您有用,请给个喜欢,如果有疑问,也欢迎在下方留言,谢谢!!!
网友评论