问候!任何人都可以请我帮忙找到解决方法:
我见过有关如何在应用程序包/ MainBundle中加载baseURL的教程,这很简单,但没有来自iPhone文档目录的资源。
我的文件夹的结构如下:
dirX
|---> file.xml
|---> dirCSS
|---> style.css
我可以检索目录X的完整路径(Users /......./ dir X)。但是,将该路径传递给UIWebView的baseURL时
[webView loadHTMLString:fileXMLString baseURL:pathToDirX]
... webView无法识别资源(例如dirCSS中的style.css)作为fileXMLString中的href'
<link href="dirCSS/style.css" rel="stylesheet" />
所以目前我的应用程序可以成功加载html字符串但不加载样式表,因为html字符串中的CSS链接是 relative - 例如。 CSS / style.css中
非常感谢任何帮助:)
答案 0 :(得分:25)
经过一些谷歌搜索后,我终于找到了一个适合我提出的问题的解决方案。希望这可以帮助那些面临同样问题的人。
技巧是在为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的路径,但它也可以在其他文件夹中工作,即Documents(及其子文件夹),就像我在我的文件中一样。
亲切的问候, oonoo
PS再次感谢Nic回复:)
答案 1 :(得分:12)
获取文档目录的路径:
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设置为文档目录。
答案 2 :(得分:1)
// 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;
}