先说运行场景
第一种情况比如我本地有一个HTML我需要加载,但是图片在工程里面。
第二种情况webView已经加载完成其实图片已经缓存到了本地,直接去沙盒读取缓存。
第三种情况如果有类似新闻类的详情页图片比较多,我想把缓存逻辑放到本地来处理。比如完全可以用SDWebImage缓存图片,还可以做图片点击放大等交互操作。
第一种关键代码:注意工程的图片资源在工程里面
<img src="11.0_network_ permissionsStatus_icon.png"/>
第二种关键代码:用到了一个第三方库从沙盒里面取图片RNCachingURLProtocol
NSString *fileName = [RNCachingURLProtocol cachePathForURLString:imageUrl];
RNCachedData *cache = [NSKeyedUnarchiver unarchiveObjectWithFile:fileName];
UIImage *image = [UIImage imageWithData:cache.data];
第三种关键代码:WebViewJavascriptBridge 用来H5和native交互的代码。JS把HTML所有图片url传过来缓存到本地,还可以做点击放大效果。
self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.TXTWebView];
[self.bridge setWebViewDelegate:self];
[WebViewJavascriptBridge enableLogging];
//获取webView所有图片的src
[self.bridge callHandler:@"getImageUrlsArray" data:nil responseCallback:^(id responseData) {
[self downloadAllImagesInNative:responseData[@"data"]];
}];
//webView图片被点击事件响应
[self.bridge registerHandler:@"imageDidClicked" handler:^(id data, WVJBResponseCallback responseCallback) {
}];
网友评论