`

swift -> WebView 兼容 ios8 清除缓存 方法

 
阅读更多

 

也可以直接删除document 下的cache 文件夹

http://mft.iteye.com/admin/blogs/2394856

 

import Foundation
import WebKit

func removeWebData() {

    if #available(iOS 9.0, *) {

        let websiteDataTypes = WKWebsiteDataStore.allWebsiteDataTypes()
        let date = NSDate(timeIntervalSince1970: 0)

        WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes, modifiedSince: date as Date, completionHandler: {
            #if DEBUG

                print("remove all data in iOS9 later")

            #endif
        })

    }else {

        // Remove the basic cache.
        URLCache.shared.removeAllCachedResponses()

        // Delete system cookie store in the app
        let storage = HTTPCookieStorage.shared
        if let cookies = storage.cookies {
            for cookie in cookies {
                storage.deleteCookie(cookie)
            }
        }


        do {
            // folder 를 삭제하는 대신 contents 를 삭제하는 이유?
            // MainVC 가 호출되면 cache, cookie가 발생하므로 로딩시 확인된 cache, cookie 폴더의
            // contents 에 대해서만 삭제 진행.

            // Clear web cache
            try deleteLibraryFolderContents(folder: "Caches")

            // Remove all cookies stored by the site. This includes localStorage, sessionStorage, and WebSQL/IndexedDB.
            try deleteLibraryFolderContents(folder: "Cookies")

            // Removes all app cache storage.
            try deleteLibraryFolder(folder: "WebKit")

        } catch {
            #if DEBUG

                print("Delete library folders error in iOS9 below")

            #endif

        }
    }
}

/**
 Delete folder in library

 - parameter folder: a folder you want to delete

 - throws: throws an error
 */
func deleteLibraryFolder(folder: String) throws {
    let manager = FileManager.default
    let library = manager.urls(for: .libraryDirectory, in: .userDomainMask).first!
    let dir = library.appendingPathComponent(folder)
    try manager.removeItem(at: dir)
}

/**
 Delete contents in library folder

 - parameter folder: target folder

 - throws: throws an error
 */
private func deleteLibraryFolderContents(folder: String) throws {
    let manager = FileManager.default
    let library = manager.urls(for: FileManager.SearchPathDirectory.libraryDirectory, in: .userDomainMask)[0]
    let dir = library.appendingPathComponent(folder)
    let contents = try manager.contentsOfDirectory(atPath: dir.path)
    for content in contents {
        do {
            try manager.removeItem(at: dir.appendingPathComponent(content))
        } catch where ((error as NSError).userInfo[NSUnderlyingErrorKey] as? NSError)?.code == Int(EPERM) {
            // "EPERM: operation is not permitted". We ignore this.
            #if DEBUG

                print("Couldn't delete some library contents.")

            #endif
        }
    }
}

 

分享到:
评论

相关推荐

    swift-iOS原生webView与JS交互工具

    在iOS应用开发中,有时我们需要在原生Swift代码和网页内容之间进行交互,这通常涉及到WebView的使用。Swift-iOS原生webView与JS交互工具,如`SFWebViewBridge`,就是为了实现这一目标而设计的。它允许开发者在Swift...

    swift-使用webview让用户授权登录微博然后自动获取用户信息

    这个项目“swift-使用webview让用户授权登录微博然后自动获取用户信息”显然涉及到iOS和Android两个平台,分别通过`weibo`文件夹下的代码来实现。在iOS端,使用的是Swift编程语言,而在Android端则是用Java或Kotlin...

    ios WebView 页面缓存

    iOS中的WebView主要由UIWebView(在iOS 8后被WKWebView取代)负责加载和渲染网页。当用户访问一个网页时,系统会自动管理HTTP请求和响应,包括缓存机制。缓存分为两种主要类型:内存缓存和磁盘缓存。 1. 内存缓存:...

    ios-WebView离线缓存.zip

    本项目“ios-WebView离线缓存.zip”主要探讨的是如何利用YYCache和系统提供的NSURLProtocol实现WebView的离线缓存功能,这对于在网络状况不佳或者无网络环境下的用户体验提升至关重要。 YYCache是由著名iOS开发者...

    Android代码-Android-X5WebView基本封装

    Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...

    swift-webView进度条显示Demo

    在iOS应用开发中,Swift语言为我们提供了丰富的工具和框架来构建功能丰富的用户界面。"swift-webView进度条显示Demo"是一个实例,展示了如何在使用WKWebView加载网页时,同步显示一个进度条,以提供更好的用户体验。...

    swift-实现类似微信的webView导航效果

    在Swift编程中,创建一个类似微信的webView导航效果涉及到多个技术点,主要涵盖UIWebView或WKWebView的使用、自定义导航控制器以及手势识别。这里我们将深入探讨如何利用这些技术实现这个功能。 首先,我们需要理解...

    react-native-webview.zip

    1. **版本兼容性**:确保React Native WebView库的版本与React Native框架版本兼容,避免出现兼容性问题。 2. **性能优化**:合理使用`shouldOverrideUrlLoading`方法,避免不必要的页面重载。另外,可以考虑使用`...

    swift-JHWebRequest使用webview发起请求

    下面将详细介绍`JHWebRequest`以及如何在Swift中利用它通过WebView发起请求。 首先,`JHWebRequest`是一个基于URLSession的网络请求框架,它封装了常见的网络操作,如GET、POST、PUT、DELETE等,并提供了异步回调...

    swift-ReactNative的跨平台WebView

    4. **事件和方法的通信**: React Native的WebView组件支持通过`onMessage`监听JavaScript的事件,并通过`postMessage`方法向WebView中的JavaScript发送数据。在Swift端,你可以通过`RCTEventEmitter`类来响应这些...

    android-system-webview-7703.apk

    Android8.0以下手机自带的android-system-webview版本过低使用

    解决React-Native的WebView不支持Android选择图片和拍照

    可以创建一个自定义的`WebView`组件,覆盖`onShouldStartLoadWithRequest`方法,以处理文件选择的结果: ```javascript import { WebView } from 'react-native-webview'; class CustomWebView extends React....

    ios-swift webView 侧滑返回.zip

    在iOS应用开发中,WebView是用于展示网页内容的重要组件,特别是在使用Swift编程语言时。"swift webView 侧滑返回"这个主题关注的是如何在使用WebView加载网页内容的同时,实现一个类似原生应用的侧滑返回功能,即...

    swift-两步实现iOSUIWebView通过cookie完成自动登录。

    在iOS应用开发中,UIWebView是苹果提供的一种用于在应用内加载网页内容的组件。有时候,我们希望用户在登录一次后,再次打开应用时能够自动登录,这时就需要利用cookie来保存用户状态。以下将详细解释如何使用Swift...

    Swift-Tutorial-iOS8-WebView:Swift (iOS 8) 教程 - WebView

    在Swift编程语言中,WebView是iOS应用开发中的一个重要组件,用于在应用程序内展示网页内容。在iOS 8及更高版本中,我们可以使用WKWebView来替代早期的UIWebView,因为WKWebView提供了更好的性能和稳定性。本教程将...

    crosswalk-webview比webview更好用

    在实际开发中,你可以通过引入`crosswalk-webview-14.43.343.23-arm`这样的库文件,将Crosswalk-WebView集成到Android项目中。这个特定版本是针对ARM架构的设备,包含了特定版本的Crosswalk-WebView,确保在相应设备...

    ios-webView与js的交互.zip

    WebView与JavaScript的交互是iOS应用与Web技术融合的关键,它使得原生应用能够利用Web技术来增强用户体验,同时也让网页能够调用iOS原生功能。本资料“ios-webView与js的交互.zip”主要探讨了如何在iOS应用中实现...

    Android逆向-frida hook 脚本- hook webview

    Android逆向-frida hook 脚本- hook webview。 frida hook webview的loadurl方法,获取加载的地址和调用链。 Java.choose 获取到webview的对象,可以主动调用webview的方法。

    WebView2-20200512- WebView2Loader.dll.zip

    【WebView2Loader.dll详解】 WebView2 是微软推出的一款现代Web技术框架,用于在桌面应用程序中嵌入Web内容。它基于Chromium项目,提供了与最新Web标准兼容的浏览器内核,使得开发者可以在桌面应用中轻松集成网页...

    SwiftUI中的 WebView

    在SwiftUI中,WebView是一个非常重要的组件,它允许开发者在应用中嵌入网页内容,提供丰富的交互体验。SwiftUI是苹果公司推出的声明式用户界面框架,适用于iOS、macOS、watchOS和tvOS等平台。在SwiftUI中使用WebView...

Global site tag (gtag.js) - Google Analytics