iPhone Dev:UIWebView baseUrl到Documents文件夹中的资源不是应用程序包
问候!任何人都可以请您帮助我发现围绕以下几个办法:从文件夹iPhone Dev:UIWebView baseUrl到Documents文件夹中的资源不是应用程序包
- 负载的HTML成的UIWebView使用loadHTMLString,包括(使用基本URL)的资源,如CSS,图像文件在用户的文档目录中 - 和不是来自应用程序的MainBundle。
我见过关于如何使用baseURL加载应用程序捆绑包/ MainBundle的教程,该应用程序捆绑包/ MainBundle非常简单,但没有来自iPhone的Documents目录的资源。
我的文档文件夹的结构如下:
dirX
|---> file.xml
|---> dirCSS
|---> style.css
我可以检索的完整路径的目录X(用户/......./ DIR X)。然而,通过这条道路的时候到一个UIWebView的基本URL,从而
[webView loadHTMLString:fileXMLString baseURL:pathToDirX]
... webView的不承认的资源(例如在dirCSS style.css文件)作为fileXMLString
<link href="dirCSS/style.css" rel="stylesheet" />
内href'ed所以目前我的应用程序可以成功加载html字符串,但不加载样式表,因为链接到html字符串内的CSS是相对 - 例如。 CSS/style.css中
任何帮助是非常赞赏:)
经过一番谷歌搜索后,我终于找到了一个适合我提出的问题的解决方案。希望这可以帮助那些面临同样问题的人。
诀窍是在为UIWebView的baseURL创建NSURL对象时为字符串路径设置格式。尽管通常我在大多数情况下使用典型的“Users /...../ dir/file”,但使用UIWebView的loadHTMLString:baseURL进行加载需要不同的方法。
如http://dblog.com.au/iphone-development/loading-local-files-into-uiwebview/,在那里我得到了解决描述,路径字符串的资源只是需要有斜杠被替换为双斜杠和空格%20:
NSString *imagePath = [[NSBundle mainBundle] resourcePath];
imagePath = [imagePath stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
imagePath = [imagePath stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSString *HTMLData = @"
<h1>Hello this is a test</h1>
<img src="sample.jpg" alt="" width="100" height="100" />";
[webView loadHTMLString:HTMLData baseURL:
[NSURL URLWithString:
[NSString stringWithFormat:@"file:/%@//",imagePath]
]];
待办事项注意的替换字符串,并且还的:
[NSString stringWithFormat:@"file:/%@//",imagePath]
尽管示例代码上面检索的路径的应用的mainBundle,它也可以在其他文件夹中的工作,即,文档(和其子文件夹)和我一样在矿。
亲切的问候, oonoo
PS再次感谢尼克的答复:)
要获得路径文件目录:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"index.xml"];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]]
拥有一切工作的最简单的方法,是简单地加载从文档目录中的index.html而不是加载一个字符串。否则,将baseUrl设置为文档目录。
感谢尼古拉的及时答复!我已经尝试过使用该文档目录路径,但UIWebView的baseURL似乎并没有正确使用,并且不会从文档目录加载CSS /图像。 其实我有两件事 – oonoo 2009-12-18 03:44:07
是的,事实上我没有问题直接用loadRequest加载html,因为它很容易放置图像和CSS很好,但它的速度有问题。由于我从iPhone文档文件夹中加载loadHTMLString似乎是理想的,实际上很容易加载html字符串,除了..是的,无法获得加载的CSS和图像。 – oonoo 2009-12-18 04:09:19
我编辑了我的答案,尝试loadRequest。 – 2009-12-18 04:36:24
// call this method and set the directory , Currently it is cache directory . If you want document directory then change NSCacheDirectory to NSDocumentDirectory
-(NSString*)getBasePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES);
NSMutableString *cacheDirectory = [NSMutableString stringWithString:[paths objectAtIndex:0]];
[cacheDirectory appendString:@"/"];
NSRange renge= NSMakeRange(0, cacheDirectory.length);
[cacheDirectory replaceOccurrencesOfString:@"/" withString:@"//" options:NSCaseInsensitiveSearch range:renge];
renge= NSMakeRange(0, cacheDirectory.length);
[cacheDirectory replaceOccurrencesOfString:@" " withString:@"%20" options:NSCaseInsensitiveSearch range:renge];
[cacheDirectory insertString:@"file://" atIndex:0];
//file:////Users//hb//Library//Application%20Support//iPhone%20Simulator//6.0//Applications//3A141D33-390A-4DD2-8825-7DDC07D29894//Library//Caches//
return cacheDirectory;
}
您可以使用NSString的stringByAddingPercentEscapesUsingEncoding:方法添加转义百分比。 – ddnv 2011-02-03 16:53:17
这篇文章对我非常有帮助。这次真是万分感谢! ;-) – andi1984 2012-01-26 11:25:51
这是从应用程序包加载,而不是从Documents目录加载。您链接的页面也在讨论从包中加载。 – 2012-06-26 23:40:21