UIWebView 加載本地文件,多層的網頁目錄結構失敗分析和解決,以及demo

http://blog.csdn.net/mangosnow/article/details/36879725

 

此方案解決了以下問題:html

 

有一個本地能夠打開的網頁,這個網頁是一個文件夾。文件夾裏面是一個index.html。 同級還有其餘的文件夾。如圖:web

 

 

要求使用 UIWebView 把此網頁徹底加載,使用普通方法加載是這樣的:app

 

 

 

分析:oop

 

使用普通的本地加載方式有兩種方法

url

第一種,把本地文件初始化成Request,讓webview 加載Requestspa

[objc]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
  1. NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];  
  2. NSURL *url = [NSURL fileURLWithPath:htmlPath];  
  3. [aWebView loadRequest:[NSURLRequest requestWithURL:url]];  

第二種,把本地文件的數據包裝成NSData,讓UIWebview實例對象加載.net

[objc]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
  1. NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];  
  2. NSURL *url = [NSURL fileURLWithPath:htmlPath];  
  3. [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 的路徑)

工程結構以下

 



 

最後的加載方式以下:

[objc]  view plain copy print ? 在CODE上查看代碼片 派生到個人代碼片
    1. NSString *bundleFile = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"bundle"];  
    2. NSString *htmlFile = [bundleFile stringByAppendingPathComponent:@"/index.html"];  
    3.       
    4. NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];  
    5. [aWebView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:bundleFile]];  
相關文章
相關標籤/搜索