上周看了几天的UIWebView,终于知道如何展示本地HTML,并且正确加载HTML相对路径下的JS文件了。但是,方案上午被否决了,为了缅怀一下上周的收获,也防止以后重蹈UIWebView的覆辙,还是记录一下为好。 UIWebView类有三个主要方法:
- (void)loadRequest:(NSURLRequest *)request;
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
加载本地文件可以用第二个或者第三个,我本着简单做人高效做事的原则,选择了参数少的第二个方法。几经周折才发现,第二个参数baseURL:(NSURL *)baseURL的作用就是指定HTML文件中所有“超链接”“CSS”“JS”文件的相对路径的基地址。还有一点值得注意的是,想xcode工程中添加HTML和JS文件的时候,最好将整个文件夹以文件夹引用的形式添加,如下图,否则JS文件可能没加到工程中去。
然后加载HTML页面的代码如下:
NSString *bundlePath = [[NSBundle mainBundle] bundlePath] ;
bundlePath = [bundlePath stringByAppendingString:@"/anychart" ] ;
NSString * htmlPath = [NSBundle pathForResource:@"xchart4html5.config" ofType:@"html" inDirectory:bundlePath];
NSString * htmlPageStr = [NSString stringWithContentsOfFile:htmlPath ] ;
[webView loadHTMLString:htmlPageStr baseURL:baseURL ] ;
注意上文中的“baseURL”的计算过程如下:
NSString *bundlePath = [[NSBundle mainBundle] bundlePath] ;
bundlePath = [bundlePath stringByAppendingString:@"/anychart" ] ;
NSMutableString* stringBuffer = [[NSMutableString alloc ] init ] ;
[stringBuffer appendString:bundlePath ] ;
NSURL *baseURL = [NSURL fileURLWithPath:stringBuffer];
然后就没有然后了,K.O.