如何在Android Webview中侦听任何cookie更改

时间:2017-04-14 18:32:06

标签: android android-webview

我的应用程序使用webview打开一个网页,该网页在网页上进行的某些交互中更新了几个cookie。现在我想读取该cookie并根据cookie的值进行一些UI调整。

iOs有一些Observers的实现,可以附加到cookie列表,并获得任何cookie更改的通知。

我正在寻找类似的解决方案,但找不到任何类型的听众或可以附加到cookie的东西,并在更新时了解它们。

我在CookieManagerCookieSyncManger

中阅读了所有内容

https://developer.android.com/reference/java/net/CookieManager.html

https://developer.android.com/reference/java/net/CookieManager.html

但没有任何帮助。

我知道使用javascript接口挂钩是一个更好的解决方案,但由于网站已经在生产中运行,因此暂时无法实现。

2 个答案:

答案 0 :(得分:1)

我相信你需要深入1层。 CookieStore - https://developer.android.com/reference/java/net/CookieStore.html是您正在寻找的内容。您可以创建自己的实现来覆盖add(),get(),remove()等,并在那里包含您自己的回调。

这里有一篇SO帖子,介绍如何使用共享首选项支持的实现 - How do I persist cookies when using HTTPUrlConnection?,但您可以根据需要自行推送并备份它。 (是的,它仍然与Retrofit相关 - Retrofit and persistent cookie store

很抱歉,相同的类名,不同的包 - android.webkit.CookieManager不是java.net.CookieManager。我看了android.webkit.CookieManager&的相关代码。 android.webkit.WebViewFactory

CookieManager由WebViewFactoryProvider实例提供。如果没有严重的黑客攻击,似乎不可能做你想做的事。

我还检查了Crosswalk,其XwalkCookieManager。这可能对你有用,但它不是我尝试过的东西,它会大大增加你的APK大小。

答案 1 :(得分:1)

作为解决方法,我在onLoadResourceWebViewClient的每次调用中都会读取Cookie,并将其与之前的值进行比较。 这是一个比观察者模式更繁忙的循环,但它适用于我。