将UIWebView根URL重新映射到[[NSBundle mainBundle] bundleURL]

时间:2010-11-03 22:24:13

标签: iphone uiwebview nsbundle

我的iPhone应用程序中有一些HTML和一些图像,排列如下:

html/
    foo.html
images/
    bar.png

我可以通过几种不同的方式让bar.pngUIWebView显示 - 从foo.html加载NSUrl,然后从目标树向后走html目录:

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

或使用foo.htmlloadHtmlString加载到字符串中,并使用[[NSBundle mainBundle] bundleURL]作为baseURL

<img src="images/bar.png"/>
但是,这两种都有点笨拙 - 在第一种情况下,如果我移动HTML文件我必须重新调整所有相对路径,而在第二种情况下,我必须忽略实际的路径结构HTML文件。

我想做的工作就是这个 -

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

- 将bundleURL视为“网站”的根。有没有办法让这项工作,或者我注定要将其翻译成file:///images/bar.png并找不到文件?

2 个答案:

答案 0 :(得分:1)

我能看到你这样做的唯一方法就是在你的应用中嵌入一个Web服务器。 Matt Gallagher有一篇博文可以从此开始。或者,CocoaHTTPServerMongoose可以放入您的项目中。

答案 1 :(得分:0)

如果我没弄错的话,您的项目包中有一些文件要加载到Web视图中。您可以使用以下几行代码完成此操作:

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

我假设您有一个包含Web视图模式的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]]];