UIWebView - Load a local .html file with linked re

2019-07-04 04:24发布

I don't know how many forums I have already read, but I really don't know why it doesn't work!

I have an iPhone Application and I would like to show a Epub book to my user.

The user can read it online, otherwise he can download it into the Application Documents directory to read it afterwards.

I build this folder structure same like the online version and saved it into the document folder "frontend".

I ALSO can read this maintaine .HTML file, BUT the linked JS / CSS and HTML files does not work.

So I have some screenshots. I don't know, why the javascript cannot access to the .html docs.

offline version - saved into the filesystem "document folder"

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

I hope you could give me some hints.

2条回答
我欲成王,谁敢阻挡
2楼-- · 2019-07-04 04:46

Simply write the code

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];

The main thing is provide base url as your mainBundle or documents directory.

查看更多
聊天终结者
3楼-- · 2019-07-04 04:52

After much fiddling around and reading a lot of answers, here is my simple consolidated solution:

1) Make sure all your bundle resources are unique---directories get flattened

It is super frustrating, but if you had directories "About/index.html" and "Home/index.html", one of the last "index.html" to get copied into the bundle will overwrite the previous.

2) JavaScript files will be in the wrong Build Phase

In Xcode click on your project, then click on your app target, then click on Build Phases. Notice the JavaScript files will wrongly be in Compiled Sources: move JS files into Copy Bundle Resources.

3) Use UIWebView's loadRequest:

Don't load from a string. Use an NSURL instead.

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];
查看更多
登录 后发表回答