2012-06-27 175 views
6

我有構造這樣一個HTML頁面:的UIWebView和基本URL絕對路徑

<html> 
    <head> 
    <link rel="stylesheet" href="/style.css" /> 
    </head> 
    <body> 

    </body> 
</html> 

它存儲在My Documents目錄:

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/12345-ID/Documents/mysite/index.html 

我也存儲在style.css中文件目錄:

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/12345-ID/Documents/mysite/style.css 

但是現在,當我嘗試使用THI將HTML加載到我的WebView S:

NSURL *test = [NSURL URLWithString:@"file:///Users/username/Library/Application Support/iPhone%20Simulator/5.1/Applications/12345-ID/Documents/mysite/"] 
[myWebView loadHTMLString:<the content retrieved from index.html> baseURL:test]; 

CSS中未裝載,當我攔截請求對樣式表與NSURLProtocol我可以看到該請求是錯誤的。它正試圖要求:

文件:///style.css

,而不是完整的基本URL。現在我可以通過刪除html文件中/style.css前面的/來解決這個問題。但有沒有簡單的方法來解決這個本地代碼而不修改HTML?

+0

這正是我正在使用的內容(請參閱內容) – Thys

+0

您是否嘗試將NSURL * test = [NSURL .......行結尾的'/'取消。您可能會遇到雙斜線條件,這可能會導致它默認爲用戶位置,只是一個想法。 – trumpetlicks

+0

不工作:( – Thys

回答

2

刪除斜槓是唯一的解決方案

+0

但是,一旦應用程序上線並且不再駐留在該特定路徑的模擬器中,您將遇到問題... trumpetlicks解決方案無論應用程序位置如何都有效。 – darwin

+0

應該可以在webview中使用絕對路徑。你需要實現自定義的NSURLProtocol。雖然它需要很多代碼,所以我正在尋找一種簡單的方法來處理這個問題。一旦我找到它。我會在這裏發佈。 –

12

生成的路徑和基本URL方式如下:

NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSURL *baseURL = [NSURL fileURLWithPath:path]; 
[webView loadHTMLString:htmlString baseURL:baseURL]; 

關於這個問題的偉大的博客:

http://iphoneincubator.com/blog/windows-views/uiwebview-revisited

一個SO QA關於這個問題的

UIWebView and local css file

+0

刪除斜槓是唯一的解決方案,仍然非常感謝至少試圖幫助:) – Thys

+0

我有些以爲這將是事實,但直到你嘗試組合......對不起,沒有適合你的需求的解決方案。 – trumpetlicks