swift - WKWebView 和 NSURLCache 提供本地内容

标签 swift ios8 wkwebview nsurlcache

我的应用程序在 UIWebView 中加载了一个非常大的网络应用程序。

我写了一个 NSURLCache 扩展“LocalCache”。

LocalCache 扩展拦截我的 webapp 加载,并从加密的本地应用程序包中提供所有请求的文件。此逻辑在 NSURLCache 的 cachedResponseForRequest 方法中实现。因此,该应用 100% 在本地提供:

class LocalCache:NSURLCache {
    override func cachedResponseForRequest( request: NSURLRequest) -> NSCachedURLResponse? {
        if (request points to my domain) {
            get file from bundle
            decrypt it
            return local copy
        } else {
            return super.cachedResponseForRequest(request)
        }
    }
}

NSURLCache.setSharedURLCache(LocalCache());

我想将此功能移植到 WKWebkit。我想知道是否有一种方法可以实现类似的东西,因为不幸的是,正如您可能知道的那样,WKWebView 不使用 Cocoa 堆栈与 NSProtocol、NSUrl、NSUrlCache ....使我当前的方法无用。

那么,用 WkWebView 可以完成类似的事情吗?

注意:UiWebView“认为”我的应用程序来自远程服务器这一事实是应用程序的关键:如果我只是在本地加载应用程序,即。 file://,有很多东西不起作用,例如,YouTube 视频,因为 youtube api 提示“file://”不是批准的来源。所以我正在寻找的 WkWebView 解决方案必须与拦截缓存有关,而不是注入(inject)本地 javascript。

最佳答案

几个月前我处于一个非常相似的位置(使用 NSURLProtocol/NSURLCache 并想从 UIWebView 迁移到 WKWebView),我最终做的是使用本地 HTTP 服务器来处理我的文件/请求( https://github.com/mattstevens/RoutingHTTPServer ).

这也帮助我处理了一个不同的问题,它与在 UIWebView 上加载 HTML5 视频有关,因为一些范围请求没有被 UIWebView/NSURLCache 拦截。

关于swift - WKWebView 和 NSURLCache 提供本地内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573840/

相关文章:

ios - 如何将 xcode ui 文件从一个项目复制到另一个项目?

ios - TestFlight 安装的应用程序崩溃与 Swift 包管理器依赖项

ios - 如何从不同的方法访问 UICollectionViewCell 中标签的文本?

javascript - WKUserScript在iOS10中不调用,但在iOS9中有效

ios - 导入 swift iOS 项目到另一个项目

ios - 在 UIAlertController 中的 Action 下方显示一个空格

objective-c - 带有 inputView 的 UITextField 在某些 iOS 8 模拟器中不起作用

ios - WKWebView:无法更改字体大小

ios - WKWeb View : Ignoring request to load this main resource because it is outside the sandbox

swift - AVFoundation:使用 AVAudioEngine 和 AVAudioFile 的格式错误的 .m4a 文件格式