美文网首页
用UIWebView加载本地文件(设置fragment问题)

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

作者: AgoniNemo | 来源:发表于2017-02-17 11:12 被阅读67次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/luykwttx.html