我一直在寻找这个,找不到任何东西.出于一些有趣的原因,我基本上需要将整个网站存储在我的iPhone中.无论我怎么弄清楚如何在我的UIWebView中正确显示它.
编辑:我应该澄清,我可以加载原始的HTML文件,并且我已经将所有路径都归为本地,除了没有任何内容链接.
这是代码
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有一堆
没有任何JS代码被执行
看起来您正在从包中加载HTML.这意味着所有其他文件(.js,.css和任何媒体文件)也需要出现在您的包中.所以要检查的第一件事是查看可执行文件的内容并确保包含js等文件.
如果看起来很好,接下来要检查的是html,js或css文件是通过相对URL还是绝对URL引用内容.如果Web内容中存在绝对路径引用,则UIWebView将尝试每次都下载该内容,因此只有在您具有网络连接时它才会起作用.如果路径是相对的,那么它将查看捆绑包以查看是否存在这样的文件.
当您将html和内容包含到XCode项目文件中时,您可能会将文件拖到项目侧栏,并询问是否"为任何添加的文件夹递归创建组"或"为任何添加的文件创建文件夹参考"文件夹".
默认值是第一个,这意味着XCode在项目中创建一个黄色文件夹,但是当生成输出包时,它将忽略磁盘上的目录层次结构.如果选择第二个选项,则文件夹为蓝色,如果查看输出包,则会看到整个文件夹层次结构已被复制.
第一个适用于简单的网页,其中所有内容都在同一文件夹级别,您可以使用上面列出的方法加载它.如果您的网页很复杂并且引用子文件夹中的内容,则第二种情况会更好用,在这种情况下您需要从相对路径(例如,'webpages'文件夹)加载网页:
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"webpages"];
要检查的最后一件事是html文件中是否有任何BASE标记.这是一种为页面上的所有链接指定默认地址或目标的方法,但它可以删除webview链接.
问题是这个电话:
NSURL *url = [NSURL fileURLWithPath:path];
没有设置baseURL,所以.html文件中的相对路径,如javascript,css,图像等不起作用.
而是使用这个:
url = [NSURL URLWithString: [path lastPathComponent] relativeToURL: [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] isDirectory: YES]];
然后将找到index.html文件中的"styles.css"之类的内容,将它们复制到.html文件旁边的包中.