今天用UIWebView加載本地資源時(shí),遇到了些問題:html中引用的資源不能帶路徑,否則就找不到,然而如果不加路徑的話,會(huì)給前端工程師帶 來麻煩,資源目錄結(jié)構(gòu)會(huì)很混亂。上網(wǎng)查資料,發(fā)現(xiàn)很多人遇到過這個(gè)問題,但沒查到好的解決辦法。研究了一下,找到了辦法,分享給大家。
UIWebView提供了3種加載頁(yè)面的方式:
-(void)loadRequest:(NSURLRequest*)request;
-(void)loadHTMLString:(NSString*)stringbaseURL:(NSURL*)baseURL;
-(void)loadData:(NSData*)dataMIMEType:(NSString*)MIMETypetextEncodingName:(NSString*)textEncodingNamebaseURL:(NSURL*)baseURL;
這里我只講前兩種,最后一種應(yīng)該不常用。
-(void)loadRequest:(NSURLRequest*)request
這個(gè)方法常用于加載指定url的網(wǎng)頁(yè),但其實(shí)它也能用來加載本地資源,而且很方便。
NSString*filePath=[[NSBundlemainBundle]pathForResource:@"index"ofType:@"html"inDirectory:@"Htmls"];
[self.webViewloadRequest:[NSURLRequestrequestWithURL:[NSURLfileURLWithPath:filePath]]];
這 樣就把Htmls/index.html加載到webview里了。需要注意的是,Htmls這個(gè)文件夾是 以”createfolderreferencesforanyaddedfolders“方式引入的,而非默認(rèn)。這樣做有兩個(gè)好處,一是編 譯之后,資源的目錄結(jié)構(gòu)會(huì)和當(dāng)前項(xiàng)目保持一致,而不會(huì)亂七八糟的散落在.app包中,也因此資源文件可以被html輕易找到;二是finder中文件目錄 的改變會(huì)直接映射到項(xiàng)目中,無需在xcode中手動(dòng)增刪文件。
index.html中,前端工程師引用了樣式表
base.css這個(gè)文件的路徑是其實(shí)是xxx.app/Htmls/css/base.css,而不是xxx.app/css/base.css,它可以被找到,原因是loadReqest這種方式會(huì)把當(dāng)前l(fā)oad的這個(gè)html文件的路徑作為baseURL。
-(void)loadHTMLString:(NSString*)stringbaseURL:(NSURL*)baseURL
這個(gè)方法用于直接加載html代碼。如果html沒有存在文件中,推薦使用這種方法。當(dāng)然你也可以用這個(gè)方法從本地html讀取代碼,然后加載。但此時(shí)請(qǐng)注意baseURL要傳對(duì),否則html中引用的資源是找不到的。
繼續(xù)用上面的例子,要正確加載資源,你得這么寫:
NSString*baseURL=[[[NSBundlemainBundle]resourcePath]stringByAppendingPathComponent:@"Htmls"];
[self.webViewloadHTMLString:htmlStringbaseURL:[NSURLfileURLWithPath:baseURL]];
這樣,前端工程師就可以很習(xí)慣的跟你配合開發(fā)了~
摘自:http://blog.sina.com.cn/s/blog_af73e7a701019co0.html