【问题标题】:iOS - WKWebView - Caching the previous state of the application during subsequent app launchesiOS - WKWebView - 在后续应用程序启动期间缓存应用程序的先前状态
【发布时间】: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 秒。因此我们缓存了应用程序。

【问题讨论】:

    标签: ios swift caching browser wkwebview


    【解决方案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:{})
    

    【讨论】:

    • 嗨米什卡,感谢您的回答。这是我们想要尝试和测试的东西,以了解这是否是根本原因。但我们的企业并不喜欢将缓存作为永久解决方案,因为它在每次应用启动期间都需要花费大量时间。
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2014-12-07
    相关资源
    最近更新 更多