一个UIWebView显示本地存储的网页(HTML,图片,JavaScript)(UIWebView

2019-07-20 08:00发布

我到处找这个,什么也找不到。 基本上,我需要整个网站存储我的iPhone里面的一些有趣的原因。 不管我无法弄清楚如何在我的UIWebView中正确显示。

编辑:我要澄清,我可以加载原始的HTML文件,我已经chagned所有的寻路的是本地的,除了没有在被链接。

下面是代码

self.dataDetectorTypes = UIDataDetectorTypeLink;
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self loadRequest:request];

的index.html有一堆的<script type="text/javascript" src="somescript.js">

JS代码没有被执行

Answer 1:

看起来你从你的包里面加载HTML。 这意味着所有其他文件(.js文件,名为.css,任何媒体和文件),也需要存在于你的包。 因此,要检查的第一件事就是看你的可执行文件里面的内容,并确保JS等文件都包括在内。

如果这看起来不错,检查接下来的事情是,如果HTML,JS,CSS或文件引用通过相对或绝对URL的内容。 如果有在web内容的绝对路径引用然后UIWebView的是要尽量每次下载的内容,所以当你有一个网络连接它只会工作。 如果路径是相对的,然后它会看在束,看是否存在这样的文件。

当您在HTML和内容到XCode项目文件,你可能拖累文件(S)到项目的侧边栏并询问是否“递归创建任何添加的文件夹组”或“创建任何附加文件夹引用文件夹“。

默认的是第一个,这意味着Xcode创建项目中的黄色文件夹,但是当时间来产生输出束将忽略磁盘上的目录层次结构。 如果您选择第二个选项,那么该文件夹是蓝色的,如果你在你的输出束看,你会看到整个文件夹层次结构已被复制。

对于简单的网页的首部作品,一切都是在同一个文件夹级别,你可以使用你上面所列内容加载它的方法。 第二种情况更好地工作,如果你的网页是复杂和子文件夹的内容引用在这种情况下,你需要加载从一个相对路径的网页(比如,在“网页”文件夹中):

NSString *path = [[NSBundle mainBundle] 
                 pathForResource:@"index" ofType:@"html" 
                     inDirectory:@"webpages"];

检查的最后一件事是,如果有在HTML文件中的任何BASE标签。 这是指定页面上的所有链接的默认地址或目标的一种方式,但它可以弄脏的WebView链接。



Answer 2:

问题是,这一呼吁:

NSURL *url = [NSURL fileURLWithPath:path];

不设置一个基本URL和东西像JavaScript,CSS,图像等不工作.html文件,以便相对路径。

相反,使用此:

url = [NSURL URLWithString: [path lastPathComponent] 
             relativeToURL: [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
                                       isDirectory: YES]];

然后IFF它们将被复制到包旁边的.html文件之类的东西在index.html文件“styles.css的”会被发现。



Answer 3:

您需要设置:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink


Answer 4:

确保.js文件是在你的副本中的资源在编译部分组部分,而不是。 Xcode中默认情况下它们置于编译小组。



Answer 5:

当字典添加pathFor资源,它会显示一个零字符串错误。



Answer 6:

我的尝试是出了Xcode项目文件中运行整个网页。 要做到这一点,你必须:

  1. 导入文件时,选择“创建任何添加的文件夹文件夹引用”。

  2. 设置Web视图,但要确保如前面提到的,你设置的相对路径。

     NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"html" inDirectory:@"Directory"]; NSURL *url = [NSURL URLWithString:[path lastPathComponent] relativeToURL: [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] isDirectory:YES]]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.currentWebView loadRequest:request]; 


文章来源: UIWebView display locally stored website (HTML, images, Javascript)