WKWebView和NSURLCache用于提供本地内容

时间:2015-04-11 03:40:25

标签: swift ios8 wkwebview nsurlcache

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

我写了一个NSURLCache分机" LocalCache"。

LocalCache扩展程序拦截我的webapp加载,并从加密的本地应用程序包中提供所有请求的文件。此逻辑以NSURLCache's 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一起使用....使我当前的方法变得毫无用处。 / p>

那么,WkWebView可以实现类似的东西吗?

注意:UiWebView"认为"我的应用程序来自远程服务器是应用程序的关键:如果我只是在本地加载应用程序,即。 file://,有许多内容无效,例如 YouTube 视频,因为youtube api抱怨" file://&#34 ;不是经批准的原产地。因此,我正在寻找的WkWebView解决方案必须与拦截缓存相关,而不是注入本地javascript。

1 个答案:

答案 0 :(得分:1)

几个月前我处于一个非常相似的位置(使用NSURLProtocol / NSURLCache并希望从UIWebView迁移到WKWebView),我最终做的是使用本地HTTP服务器来提供我的文件/请求({ {3}})。

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