2012-11-08 56 views
3

我不知道我已经阅读过多少个论坛,但我真的不知道为什么它不起作用!UIWebView - 使用链接资源加载本地.html文件

我有一个iPhone应用程序,我想向我的用户展示一本Epub书。

用户可以在线读取它,否则他可以将它下载到Application Documents目录中以便随后读取它。

我生成与在线版本相同的文件夹结构,并将其保存到文档文件夹“frontend”中。

我也可以阅读这个维护.HTML文件,但链接的JS/CSS和HTML文件不起作用。

所以我有一些截图。我不知道,为什么javascript无法访问.html文档。

offline version - saved into the filesystem "document folder"

online version - directly from server - it's ok!

我希望你能给我一些提示。

+0

如果你正在做一个本机应用程序,您可以使用此http://stackoverflow.com/a/9640486/792677描述的“桥梁”(拦截webView的负载请求,并将外处理web视图中) 。 –

+0

我使用[webView loadRequest ...]从文档中显示我的.html文件。这个.html也可以链接到css/JS和其他html文档的相对路径。但它不工作... – iach

+0

你的意思是js和css根本不工作?那么你可能会发现有用的链接在同一个问题的第二个答案︰http://stackoverflow.com/questions/5733883/loading-javascript-into-a-uiwebview-from-resources –

回答

3

只需编写代码

NSString *path = [[NSBundle mainBundle] pathForResource:@"offlineEpub" ofType:@"html"]; 
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 
UIWebView *webView = [[UIWebView alloc] init]; 
[webView loadHTMLString:content baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]]; 
[self.view addSubview:webView]; 

最主要的是提供基本URL作为你的mainBundle或文件目录。

+0

上面的代码是否会在离线模式下运行? – Alok

+0

是的它也可以脱机工作。 –

2

多少摆弄周围和阅读很多答案,以后这里就是我的简单整合的解决方案:

1)确保您的所有束的资源是独一无二的---目录得到扁平

这是超级沮丧,但如果您有目录“About/index.html”和“Home/index.html”,则最后一个“index.html”中的一个被复制到该包中将覆盖前一个。

2)JavaScript文件会在错误的构建阶段

在Xcode中点击你的项目,然后单击您的应用目标,然后在构建阶段。注意JavaScript文件将错误地放在编译源中:将JS文件移动到Copy Bundle Resources中。

3)使用一个UIWebView的的loadRequest:

不要从字符串加载。改为使用NSURL。

NSBundle *mainBundle = [NSBundle mainBundle]; 
NSURL *url = [mainBundle URLForResource:@"some_page" withExtension:@"html"]; 
NSURLRequest *urlReq = [NSURLRequest requestWithURL:url]; 

// Assuming you create an IBOutlet defined like: 
// @property (strong, nonatomic) IBOutlet UIWebView *wv; 
[self.wv loadRequest:urlReq]; 
+0

感谢艾米为你清晰的步骤。它真的很有用:) –