用UIWebView加载本地文件(设置fragment问题)

2017-02-17  本文已影响67人  AgoniNemo

在加载网络的html的时候,有些html加载太慢了,所以就把整个包文件给放到项目中去了。比如像下面这样:

记得选creat folder references

别告诉我你不知道怎么加载蓝色的文件?
PS:好吧,下面就是加载方法:

拖文件到项目中的选项

为什么要这么选?因为选第一个的话,你本地的html文件里引用的其他js,css文件就要修改路径了,如果文件多的话,工作量就大了。
下面问题就来了,比如网络加载的html的URL是这样的:

http://www.xxx.com/#!/cb

下面是博主加载本地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:如果还有更好的方法请在下面评论或者私信博主。

上一篇下一篇

猜你喜欢

热点阅读