Swift WKWebView和NSURLCache为本地内容提供服务

Swift WKWebView和NSURLCache为本地内容提供服务,swift,ios8,wkwebview,nsurlcache,Swift,Ios8,Wkwebview,Nsurlcache,我的应用程序在UIWebView中加载一个非常大的webapp 我已经编写了一个NSURLCache扩展“LocalCache” 此LocalCache扩展拦截我的webapp加载,并从加密的本地app包中提供所有请求的文件。此逻辑在NSURLCache的cachedResponseForRequest方法中实现。因此,应用程序100%在本地提供: class LocalCache:NSURLCache { override func cachedResponseForRequest(

我的应用程序在
UIWebView
中加载一个非常大的webapp

我已经编写了一个
NSURLCache
扩展“
LocalCache

LocalCache
扩展拦截我的webapp加载,并从加密的本地app包中提供所有请求的文件。此逻辑在
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
“认为”我的应用程序来自远程服务器这一事实是应用程序的关键:如果我只是在本地加载应用程序,即
文件://
,有很多东西不起作用,例如,YouTube视频,因为YouTube api抱怨“
文件://
”不是经批准的来源。因此,我正在寻找的
WkWebView
解决方案必须与拦截缓存相关,而不是注入本地javascript

几个月前,我的处境非常相似(使用NSURLProtocol/NSURLCache并希望从UIWebView迁移到WKWebView),最后我做的是使用本地HTTP服务器为我的文件/请求提供服务()


这也帮助我解决了另一个问题,这与在UIWebView上加载HTML5视频有关,因为UIWebView/NSURLCache没有拦截某些范围请求。

“WKWebView在进程外发出请求并呈现内容,这意味着你的应用程序不会听到他们发出的请求。”@rupps你有没有找到解决办法?我也有类似的问题。我正在考虑尝试。@rupps我有类似的要求,我使用的是WKWebView,我必须缓存响应。你们有什么解决办法吗?嗨,这是个好主意,我已经停止了IOS开发一段时间,但最终会重新投入。关于这个解决方案,对我来说,应用程序域可能是本地的,如果请求不是来自主机上运行的应用程序,我使用的一些服务会拒绝访问它们的API。这就是为什么另一个解决方案非常酷的原因,WebView认为它来自互联网!此外,我不知道从那时起它是否发生了变化,但我对WkWebView承诺的所谓“性能提升”感到有点失望。我运行了一个要求很高的应用程序,我会说性能差不多!尽管我迁移的动机之一是所谓的“性能提升”,但我主要担心的是UIWebView已经被弃用了一段时间,我担心它可能会“停止工作”,甚至在将来的版本中被删除。它也没有一些启发式方法来区分长点击和双点击(因此,除非您使用JS库来解决这一问题,否则每次点击都会有令人讨厌的300毫秒延迟),这在我阅读的WKWebView中已经有了。