2009-10-01 81 views
5

我已经在这里找过,无法找到任何东西。我基本上需要在我的iPhone内部存储整个网站,这是因为一些有趣的原因。无论我无法弄清楚如何在我的UIWebView中正确显示它。UIWebView显示本地存储的网站(HTML,图像,Javascript)

编辑:我要澄清,我可以加载原始的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代码的被执行

+0

什么是 “没有获取链接” 的意思是在这里吗? – 2009-10-01 02:45:05

回答

13

看起来像是从包中加载HTML。这意味着所有附加文件(.js,.css和任何媒体文件)也需要存在于您的包中。因此,首先要检查的是查看可执行文件的内容,并确保包含js等文件。

如果看起来不错,接下来要检查的是html,js或css文件是否通过相对或绝对URL引用内容。如果Web内容中有绝对路径引用,则UIWebView将尝试每次下载该内容,以便它只在有网络连接时才能使用。如果路径是相对的,那么它会查看包中是否存在这样的文件。

当您将html和内容包含到XCode项目文件中时,您可能将文件拖到项目侧栏,并询问是否“为所有添加的文件夹递归创建组”或“创建文件夹任何添加的文件夹的参考。“

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

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

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

的最后要检查的是HTML文件中是否有BASE标签。这是为页面上的所有链接指定默认地址或目标的一种方式,但它可以消除webview链接。

+0

这是劳拉。我被困在同样的问题,当试图使用你的解决方案,然后在我的情况下,“路径”返回零。虽然我通过使用第二个选项“为所有添加的文件夹创建文件夹引用”以相同的方式添加了html文件和资源。我错过了什么。请帮帮我。我会很感激。 – Aisha 2011-01-04 13:18:55

+0

嗨劳拉。如果“pathForResource”方法返回nil,则意味着它找不到该文件。要尝试的一件事是找到二进制.app文件在你的“build”目录中,然后右键点击它并做一个“Show Package contents”。这显示了该应用程序的主包所包含的内容。在里面寻找你的HTML文件。如果它位于文件夹中,则该文件夹名称需要位于pathForResource调用的“inDirectory”参数中。如果它在顶层,那么你没有文件夹引用。删除并重新拖放到项目中,或使用不带inDirectory的pathForResource版本。 HTH。 – Ramin 2011-01-06 02:45:30

1

的你需要设置:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink 
7

的问题是,这一呼吁:

NSURL *url = [NSURL fileURLWithPath:path]; 

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

而是使用此:

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

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

0

确保.js文件位于复制到资源包部分而不在编译部分。 Xcode默认将它们放在编译组中。

0

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

0

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

  1. 当导入文件时,选择“为所有添加的文件夹创建文件夹引用”。

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