iOS - WKWebView - 在后续应用程序启动期间缓存应用程序的先前状态
Posted
技术标签:
【中文标题】iOS - WKWebView - 在后续应用程序启动期间缓存应用程序的先前状态【英文标题】:iOS - WKWebView - Caching the previous state of the application during subsequent app launches 【发布时间】:2021-12-11 05:51:41 【问题描述】:我们有一个 ios 应用程序,它使用 WkWebView 在 Apple iPod 上加载 Web 应用程序。它支持自动登录功能,无需用户手动输入凭据。我们使用带有凭据的 POST html 表单提交逻辑来模拟自动登录。
Web 应用程序有 15 分钟的超时,之后,用户将被注销并重定向到登录屏幕,并且将在登录屏幕上显示一条名为“超时”的消息。
我们看到的问题是,每当用户重新启动应用程序时(此时无论是在后台还是前台都没有运行),期望表单提交将作为 HTML 加载到 webview 上,并且任一用户都将登录(如果凭据正确)(或)用户将被重定向到登录屏幕(带有无效凭据消息)。
webview.loadHTMLString(html, baseURL: myURL)
但在这种情况下,用户会被重定向到登录屏幕,并显示一条消息“超时”(这是应用程序的先前状态)。用户试图杀死应用程序(双击主页按钮并向上滑动)并重新启动应用程序,经过 2-3 次尝试,他成功通过身份验证并进入主屏幕。在前 2-3 次尝试中,他看到的“超时”消息是意料之外的。
WKWebView 是否出于某种原因缓存页面(或)iOS 应用程序做错了什么?任何有关如何调试的建议将不胜感激。
注意:我们的业务不希望清除缓存,因为每次在没有缓存的情况下加载大约需要 20 秒。因此我们缓存了应用程序。
【问题讨论】:
【参考方案1】:您可以随时测试清除所有WebView
数据,看看是否有帮助。在ViewController
的deinit
中尝试下面的代码,或者在应用关闭后在其中进行清理。
下面的代码将删除与发生的网络会话相关的所有数据。
for cookie in HTTPCookieStorage.shared.cookies ?? []
HTTPCookieStorage.shared.deleteCookie(cookie)
URLCache.shared.removeAllCachedResponses()
WKWebsiteDataStore.default().removeData(
ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(),
modifiedSince: Date(timeIntervalSince1970: 0),
completionHandler:)
【讨论】:
嗨米什卡,感谢您的回答。这是我们想要尝试和测试的东西,以了解这是否是根本原因。但我们的企业并不喜欢将缓存作为永久解决方案,因为它在每次应用启动期间都需要花费大量时间。以上是关于iOS - WKWebView - 在后续应用程序启动期间缓存应用程序的先前状态的主要内容,如果未能解决你的问题,请参考以下文章