使用具有子目录和外部js / img文件的UIWebView显示HTML文件

时间:2013-04-19 22:32:00

标签: ios objective-c uiwebview

在Objective C中,我想显示一个使用UIWebView构建的网站。

简要概述:我有一个包含index.html的文件夹。在该文件夹中,有一个“img”文件夹和一个“js”文件夹。 js文件夹中有许多.js文件。 img文件夹有很多图像。我可以独立运行页面(在xcode之外)没问题。

现在我能够创建一个非常基本的html文件,将它存储在与我的所有.h和.m文件相同的目录中,并使其正确显示。我现在的目标是显示我的网站与子目录,如上所述。

这是我到目前为止所得到的:

xcode的:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *path = [[NSBundle mainBundle] path:@"index" ofType:@"html"];
    NSLog(path);
    NSString *content = [NSString stringWithContentsOfFile:path encoding:NSASCIIStringEncoding error:nil];
    NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];

    [self.webView loadHTMLString:content baseURL:baseURL];
}

以下是我的文件结构:

enter image description here

当我运行它时,构建成功。但没有显示任何内容。另外,我可以检查一下 “问题导航器”选项卡(在左侧导航器上)查看问题列表。我注意到,对于我在game.html文件中包含的每个.js文件,都存在问题。他们都说基本相同的事情:

  

依赖关系分析警告:警告:没有处理文件的规则   '$(PROJECT_DIR)/Web/gameFolder/js/input/MouseInputHandler.js'的类型   用于架构i386的sourcecode.javascript

那我该怎么办?

谢谢:Captainlonate

1 个答案:

答案 0 :(得分:4)

*Dependency Analysis Warning: warning: no rule to process file '$(PROJECT_DIR)/Web/gameFolder/js/input/MouseInputHandler.js' of type sourcecode.javascript for architecture i386*

将html相关文件添加到项目后,* .js文件被添加到“构建阶段”的“编译源”列表中。所以编译器试图编译它们,但他不能,因此警告(加上它们并没有真正被复制到包中)。这种默认行为曾经让我感到好几分钟的愤怒......

从此列表中删除它们(* .js文件)并添加到“复制包资源”

另一件事是 - 在捆绑中,所有资源的层次结构都变得“扁平化”。我的意思是,如果你有这样的文件:

index.html
js/lib/jquery.js
img/circle.png
你可能做过像

这样的事情
<img src="img/circle.png">

但它不适用于webview。你必须引用同样的文件:

<img src="circle.png">

因为webview以这种方式查看捆绑包中的文件:

index.html
jquery.js
circle.png

还有一件事 - 您通过将HTML文件作为字符串加载来加载Web内容,然后将其传递给webview。这并不是很糟糕,但我相信使用其他方法会更好一些:

NSBundle* mainBundle = [NSBundle mainBundle];
NSString* path = [mainBundle pathForResource: @"index" ofType: @"html"];
NSURL* url = [NSURL fileURLWithPath: path];
NSURLRequest* req = [NSURLRequest requestWithURL: url];
[webview loadRequest: req];