此方案解決了以下問題:html
有一個本地能夠打開的網頁,這個網頁是一個文件夾。文件夾裏面是一個index.html。 同級還有其餘的文件夾。如圖:web
要求使用 UIWebView 把此網頁徹底加載,使用普通方法加載是這樣的:app
分析:oop
使用普通的本地加載方式有兩種方法
url
第一種,把本地文件初始化成Request,讓webview 加載Requestspa
- NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
- NSURL *url = [NSURL fileURLWithPath:htmlPath];
- [aWebView loadRequest:[NSURLRequest requestWithURL:url]];
第二種,把本地文件的數據包裝成NSData,讓UIWebview實例對象加載.net
- NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
- NSURL *url = [NSURL fileURLWithPath:htmlPath];
- [aWebView loadRequest:[NSURLRequest requestWithURL:url]];
發現能夠加載 index.html,但問題來了,CSS,JS,IMAGES都沒有加載進來code
經過products下的文件,在Findle中展現。點擊右鍵——現實內容,會發現導入的網頁的目錄結構沒有了,裏面是一個個文件在同一目錄下。htm
這就是問題產生的緣由:文件結構破壞,致使不能找到資源對象
解決辦法:
想辦法保留文件夾結構。
Bundle 是一種保存了文件結構的數據存儲方式,把本地網頁文件夾打包成 bundle 結構就能夠了
xxx.bundle 是文件夾xxx 加上後綴生成的, index.html 是 文件夾下 xxx 的文件
代碼中 baseURL 是一個很是重要的字段,這個字段傳入頂級路徑(也就是 xxx.bundle 的路徑)
工程結構以下
最後的加載方式以下:
- NSString *bundleFile = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"bundle"];
- NSString *htmlFile = [bundleFile stringByAppendingPathComponent:@"/index.html"];
-
- NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
- [aWebView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:bundleFile]];