2009-01-26 113 views
18

我的iPhone應用程序中有一個webview,並且我的資源文件夾中還有一些html文件。當我的應用程序加載時,我從我的資源加載到我的webview中。但是,我需要在我的webview中創建指向其他一些資源(例如圖像或其他html文件)的鏈接。只是做一個相對的鏈接不起作用:鏈接到WebView中的資源 - iPhone

<a href="OtherPage.html">Doesn't work</a> 
+3

你介意給出一個完整的代碼示例嗎?徹底閱讀本頁面,我仍然對如何正確地將它們放在一起感到困惑。謝謝。 – mwt 2010-06-08 01:52:32

回答

14

當你加載這些資源,你需要設置基地址。您可以使用以下方法執行此操作:

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL 

...其中baseURL將是資源文件夾的文件URL。

+0

謝謝 - 但我會接受我的答案不是你的,因爲它實際上解決了我的問題(在你的幫助下)。謝謝! – 2009-01-26 20:49:30

+1

你仍然可以在3.0中完成。見jdandrea的答案。 – 2009-11-13 05:56:48

1

嘗試首先加載OtherPage.html。如果你不能那麼它不在那裏,你錯過了將它添加到項目中的某些部分。如果可以的話,那麼鏈接中可能只是一個錯字,或者如8月份所述,baseURL可能不正確。當我創建了它的圖像,是在資源文件的HTML文件,它工作得很好只是用

<img src="file.png"> 
+0

不 - 如果我直接加載它可以正常工作。 – 2009-01-26 03:12:57

0

也許它確實有一些做的baseURL時:當我加載資源,我用這條線:

[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]]; 

看到最後,它說baseURL:「」。如果我拿出來,它不起作用(崩潰),但我不知道我的資源的路徑。如果有人...... .....?

3

此代碼會返回一個字符串,其中包含您的資源目錄中名爲「OtherPage.html」的文件的URL。

[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString] 
7

我固定它:我用這個像八月的BaseURL說:

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

謝謝!

+1

似乎無法在iPhone OS 3.0中使用。看到我的其他職位稍作修改! – 2009-09-08 21:03:32

2

這對我有效。我的HTML文件位於我的項目中的子文件夾(不是組)。我的HTML頁被稱爲頁01和子文件夾是HTML:

NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; 
NSString *pathToHtml = @"html"; 
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES]; 

NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]  
          pathForResource:@"page01" ofType:@"html"                
          inDirectory:@"html"] 
         encoding:NSUTF8StringEncoding error:nil]; 
[webview loadHTMLString:html baseURL:baseURL]; 
26

顯然有根據iPhone SDK Release Notes for iPhone OS 3.0一個一個抓把柄位:

問題:的UIWebView無法加載本地資源在針對3.0構建的應用中。

使用[UIWebView loadHTMLString:baseURL:]時,HTML 字符串不應使用file://方案引用本地 資源。 相反,傳遞NULLfile:// URL爲baseURL:,或直接包括與 <style><script>標記HTML中的 資源。

不夠公平。但傳入baseURL的標準問題file://網址並不適用。但是......事實證明,如果您將/更改爲//並將空格更改爲%20,您將被設置! (使用%20很有意義,但雙斜線部分讓我大吃一驚)。

假設您已經有NSString *markup設置。這是你所做的一切。 (我在這裏包裝的代碼的可讀性。您不妨重構/調整品嚐。)

NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath] 
    stringByReplacingOccurrencesOfString:@"/" withString:@"//"] 
    stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 
[webView loadHTMLString:markup baseURL:[NSURL URLWithString: 
    [NSString stringWithFormat:@"file:/%@//", resourcePath]]]; 

只要你的CSS,JavaScript和圖像文件名由單獨提及,這應該做的伎倆在iPhone OS 3.0中,關於loadHTMLString:baseURL:的問題!

0

對我來說,問題是,js文件沒有包含在捆綁。一定要檢查一下。

0

OK,這裏5年後:) ...試圖邁克爾·蓋洛德的建議正上方,但它並沒有在SIMS 5.0,5.1,6.0,6.1的工作 - 也沒有在真正的設備上運行相同。 然而此SO澄清在資源捆綁(Where is build output going?)幫助使這對我的工作是這樣的:

  1. 在項目中創建一個搜索文件夾(如邁克爾暗示 - 我還沒有嘗試「組」 )
  2. 把你的HTML文件夾中使用搜索
  3. 在Xcode中使用文件 - >文件添加到項目
  4. 確保項目的認識,它應該是在由捆:

  5. 右鍵單擊主項目目標導航窗口,
  6. 確保TARGETS被選中,構建階段選項卡,
  7. 點擊三角形|>
  8. 和 - 這裏有什麼不同於邁克爾的 - 它應該已經顯示您的html文件和路徑。 (也許XCoders提高了添加文件AI :)

因此,所有我需要做的就是複製 - 粘貼上面verbatum邁克爾的代碼和改變這一行:

     inDirectory:@"html"] 

於:

     inDirectory:nil] 

Shaazam!它的工作:)