这里非常新的XCode
基本上,我们有一个依赖于UIWebView的应用程序。当存在有效的网络连接时,我们将移动网页加载到UIWebView中,如果没有连接,我们将加载本地版本的html网页。我的方案与脱机或有限的网络连接方案有关。当这个离线场景发生时,我可以使用这个帖子的答案加载我的本地html文件:
Load resources from relative path using local html in uiwebview
在加载的本地html文件中单击一个简单的html链接(也在我的本地app目录中)时出现问题。我试过这些,但当我点击链接时,没有任何反应,链接不会带我到任何地方,模拟器只允许我复制文本:
<a href="file:///Sample.html">
<a href="file://Sample.html">
<a href="Sample.html">
<a href="/Sample.html">
<a href="Testing/Sample.html">
sample.html网页与初始加载的html页面位于同一目录中。不知道我哪里出错了,显然错过了一些简单的事情。
答案 0 :(得分:7)
我建议你重新检查你的目录层次结构。您描述的行为是当您尝试导航到的链接在本地设备上不存在时发生的情况。 我进行了以下小测试:
向视图控制器添加了Webview并加载了page1.html
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 10, 320, 300)];
[self.view addSubview:webView];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"page1" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:html baseURL:baseUrl];
<强> page1.html 强>
<html> <body> <h1>Page 1</h1> <a href="page2.html">Go to Page2</a> </body> </html>
<强> page2.html 强>
<html> <body> <h1>Page 2</h1> <a href="page1.html">Back to Page 1</a> </body> </html>
项目结构图
最终结果是,它有效。单击将从第1页转到第2页,然后再使用本地文件返回。如果我们将链接更改为:
如果
<a href="page3.html"></a>
不存在,您将获得与您遇到的相同的行为。那就是你只能剪切和复制,而不是真正去链接。
答案 1 :(得分:1)
要使用本地文件系统中的资源,请尝试使用此解决方案,就像我在WebView上显示图像一样。
-(NSString *)imagePath:(NSString *)fileName
{
if ([fileName isEqualToString:@""] == NO) {
NSLog(@"%@",fileName);
NSString *ImagePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"png"];
ImagePath = [ ImagePath stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
ImagePath = [ ImagePath stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
ImagePath = [@"file://" stringByAppendingString:ImagePath];
return ImagePath;
}
else
{
return @"";
}
}
假设您想要返回保存HTML页面的完整路径。
答案 2 :(得分:0)
@Chris有一个很好的例子,也许我们需要更新如下:
let webView = UIWebView(frame: self.view.frame)
webView.delegate = self
self.view.addSubview(webView)
let urlString = Bundle.main.url(forResource: "Page1", withExtension: "html")
webView.loadRequest(URLRequest(url:urlString!))