我的应用程序在 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/