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 数据,看看是否有帮助。在ViewControllerdeinit 中尝试下面的代码,或者在应用关闭后在其中进行清理。

下面的代码将删除与发生的网络会话相关的所有数据。

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 - 在后续应用程序启动期间缓存应用程序的先前状态的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 应用中更改 WKWebView 的来源

如何在 iOS 应用程序 WkWebView 中调试 javascript?

在 IOS 的 WKWebView 中检查下拉列表

iOS:在 WKWebView 中嵌入视频在后台停止音乐

上传图片时iOS应用WKWebView错误

IOS进阶之WKWebView