我想在应用终止时清除 UIWebView 的 URLCache,Javascript(本地存储)。
我在按下按钮时实现了以下代码。按下按钮时功能按预期工作。
func clearEverything() {
print("cleared")
URLCache.shared.removeAllCachedResponses()
URLCache.shared.diskCapacity = 0
URLCache.shared.memoryCapacity = 0
webView.stringByEvaluatingJavaScript(from: "localStorage.clear();")
let cookieJar = HTTPCookieStorage.shared
for cookie in cookieJar.cookies! {
cookieJar.deleteCookie(cookie)
}
UserDefaults.standard.synchronize()
}
在 AppDelegate 的func applicationWillTerminate 中,我使用了以下代码:
func applicationWillTerminate(_ application: UIApplication) {
print("app terminated")
clearEverything()
}
func clearEverything() {
print("cleared from App Delegate")
URLCache.shared.removeAllCachedResponses()
URLCache.shared.diskCapacity = 0
URLCache.shared.memoryCapacity = 0
ViewController().webView.stringByEvaluatingJavaScript(from: "localStorage.clear();")
let cookieJar = HTTPCookieStorage.shared
for cookie in cookieJar.cookies! {
cookieJar.deleteCookie(cookie)
}
UserDefaults.standard.synchronize()
}
每当我终止应用程序时,都会收到以下错误:
建议我在不崩溃应用程序的情况下实现此功能的最佳方法。
谢谢!
答案 0 :(得分:0)
看起来像ViewController没有webview的实例
。的ViewController()webView.stringByEvaluatingJavaScript(来自: " localStorage.clear();&#34)
清除webview中viewWillDisappear中的所有内容
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
// codes
}
问题是,当您关闭应用程序时,webview实例不存在,那么当您启动应用程序时,如何在App Delegate内部实例化Webview,并使用该实例在特定视图中显示。这样每次都可以使用webview实例,以便在关闭应用程序之前调用clearEverything。
答案 1 :(得分:0)
我得到了这个功能,但只有当应用程序以VC终止时才会显示 UIWebView 。
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillTerminate), name: NSNotification.Name.UIApplicationWillTerminate, object: nil)
}
func applicationWillTerminate() {
clearBtnPressed(Any.self)
}