2010-11-03 89 views
4

我有一些HTML和我的iPhone應用程序的一些圖像,安排是這樣的:重映射UIWebView的根網址[一個NSBundle mainBundle] bundleURL]

html/ 
    foo.html 
images/ 
    bar.png 

我能得到bar.png出現在我的UIWebView一幾個不同的方式 - 無論是裝載foo.htmlNSUrl,並步行回了從HTML目錄的目錄樹:

<img src="../images/bar.png"/> 

或通過加載foo.html成一個字符串,用loadHtmlString,並使用[[NSBundle mainBundle] bundleURL]作爲baseURL

<img src="images/bar.png"/> 

這兩者都是那種笨拙,雖然 - 在第一種情況下,如果我移動HTML文件,我周圍有rejigger所有的相對路徑,並在第二種情況,我不得不忽略HTML文件的實際路徑結構。

我想什麼做的工作是這樣的 -

<img src="/images/bar.png"/> 

- 治療bundleURL的「地盤」的根源。有什麼辦法可以使這項工作,或者我註定要翻譯成file:///images/bar.png,並找不到文件?

+0

我希望做同樣的事情。你有沒有找到解決這個問題的辦法? – Heiberg 2011-12-13 09:23:24

+0

從來沒有,對不起。 :( – 2011-12-13 21:46:06

+0

我會問,因爲這是幾年後:你有沒有找到一種好方法來使用根文件系統中的相對URL內容?在運行本地Web服務器之外,我還沒有找到理智的方式來做到這一點 - 我甚至很樂意通過重寫UIWebView的請求來破解事物,只要有地方這樣做。 – 2014-03-05 21:42:39

回答

0

如果我沒有弄錯,你的項目包中有一些文件需要加載到你的網頁視圖中。你可以用這幾行代碼簡單地做到這一點:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"bar" ofType:@"png"]; 
NSURL *imageURL = [NSURL fileURLWithPath:imagePath]; 

我假設你有一個包含你的Web視圖模式a text/html的文件。你需要添加圖像作爲對象存在(src="%@"...),然後添加imageURL的模式:

NSString *path = [[NSString alloc]initWithString:[[NSBundle mainBundle]pathForResource:@"htmlPattern" ofType:@"html"]]; 
NSError *error; 
NSString *pattern = [[NSString alloc]initWithContentsOfFile:path 
                encoding:NSUTF8StringEncoding 
                 error:&error]; 


htmlPage = [[NSString alloc]initWithFormat:pattern, 
      imageURL; 
webView = [[UIWebView alloc] initWithFrame:WEBVIEW_FRAME]; 
[webView loadHTMLString:htmlPage baseURL:[NSURL URLWithString:path]]; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:pattern]]]; 
+0

不再在這個項目上,但看起來像這樣的伎倆,將起作用。謝謝! – 2012-06-12 19:47:45

+0

我不認爲這解決了原始問題,這是要求使用根相對URL的方式。如果你來自文件系統,根相關根據定義將成爲文件系統的根源......你想要以某種方式重寫URL,以便根目錄是你想要的地方是... – 2014-03-05 21:44:58

1

只有這樣,我才能看到你這樣做,將嵌入一個Web服務器在你的應用程序。 Matt Gallagher有一個博客文章,你可以從這裏開始。或者,CocoaHTTPServerMongoose可以放入您的項目中。