UIWebView显示本地存储的网站(HTML,图像,Javascript)

时间:2009-10-01 02:36:33

标签: iphone objective-c uiwebview

我为此无所事事,找不到任何东西。出于一些有趣的原因,我基本上需要将整个网站存储在我的i​​Phone中。无论我怎么弄清楚如何在我的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有一堆<script type="text/javascript" src="somescript.js">

没有任何JS代码被执行

6 个答案:

答案 0 :(得分:13)

看起来您正在从捆绑包中加载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链接。

答案 1 :(得分:7)

问题是这个电话:

NSURL *url = [NSURL fileURLWithPath:path];

没有设置baseURL,因此.html文件中的相对路径(如javascript,css,images等)不起作用。

而是使用它:

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

然后会找到index.html文件中的“styles.css”之类的内容,将它们复制到.html文件旁边的包中。

答案 2 :(得分:1)

您需要设置:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink

答案 3 :(得分:0)

确保.js文件位于资源包的副本部分,而不是编译部分。 Xcode默认将它们放在编译组中。

答案 4 :(得分:0)

在Dictionary中添加pathFor资源时,它会显示一个nil字符串错误。

答案 5 :(得分:0)

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

  1. 导入文件时,选择&#34;为任何添加的文件夹创建文件夹参考&#34;。

  2. 设置网络视图,但请确保按前面所述设置相对路径

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