在加载网络的html的时候,有些html加载太慢了,所以就把整个包文件给放到项目中去了。比如像下面这样:
别告诉我你不知道怎么加载蓝色的文件?
PS:好吧,下面就是加载方法:
为什么要这么选?因为选第一个的话,你本地的html文件里引用的其他js,css文件就要修改路径了,如果文件多的话,工作量就大了。
下面问题就来了,比如网络加载的html的URL是这样的:
下面是博主加载本地html的写法:
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dist"];
NSURL * url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
然后加载出来了一个空的界面,最后发现要加index.html后面加#!/cb的,当然就想这个容易。
NSURL * url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@#!/cb",path]];
URL改成上面那种后,就连界面都加载不出来了,T^T
查看了下加载的错误信息,发现是#号被转义了,在网上找下转义的方法:
NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)url, (CFStringRef)@"!NULL,'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8);
然后还是没什么用还是加载失败!!!
后来发现是方向有问题,URL创建的方法是fileURLWithPath,这个是给个路径的,在后面加东西肯定会出错的,因为这个路径是不存在的。在网上查了下资料,#号叫锚点,是网页内部的超级链接。于是就想像是不是在URL内部设置的。去stackoverflow搜索了下,找到了解决方法:
NSURL * url = [NSURL fileURLWithPath:path];
NSString *fragment = @"#!/cb";
url = [NSURL URLWithString:fragment relativeToURL:url];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
PS:如果还有更好的方法请在下面评论或者私信博主。