如何在我的IOS应用程序中包含我的html页面的js文件?

时间:2012-10-17 05:01:13

标签: javascript iphone html ios uiwebview

当我尝试在UIWebView中加载html字符串时,我遇到了问题。这就是我正在做的事情

NSString *temp = [[NSString alloc] initWithFormat:@"<head><script type='text/javascript' src='code39.js'></script><style type='text/css'>#barcode {font-weight: normal; font-style: normal; line-height:normal; sans-serif; font-size: 12pt}</style></head><body><script type='text/javascript'>function get_object(id) {var object = null;if (document.layers) {object = document.layers[id];} else if (document.all) {object = document.all[id];}return object;}get_object('barcode').innerHTML=DrawCode39Barcode('%@',2);</script></body>",[count objectAtIndex:i]];

[mainWebView loadHTMLString:temp baseURL:nil];

所以这就是问题:

<script type='text/javascript' src='code39.js'>

如何在我的应用程序中添加code39.js文件,以便我的html可以访问它并在UIWebview中加载它。

请帮忙......

4 个答案:

答案 0 :(得分:11)

最简单的解决方案

假设您的应用程序附带了JavaScript代码,并且无法通过网络获取它,一个简单的解决方案是使您的JavaScript代码内联而不是外部资源。也就是说,您可以将code39.js的内容放在<script>标记之间,就像您的其他JavaScript代码一样。

当然,如果您想添加大量代码,并且HTML进一步复杂化,这种方法效果不佳。你的NSString声明会很快(甚至更多)变得笨拙!


替代方案:将脚本添加为资源

您可以将JavaScript文件添加为要包含在应用包内的资源文件。为此,只需将code39.js添加到Xcode项目中即可。

请注意,默认情况下,Xcode会将.js个文件添加到“编译源”构建阶段。你想要这个;您希望将文件视为资源。值得庆幸的是,它很容易解决:

  1. 选择要访问其设置的顶级项目。
  2. 单击您的应用程序目标,然后选择“Build Phases”。
  3. .js文件拖出“编译源”部分并进入“复制包资源”部分。
  4. 这将确保Xcode在您构建应用程序时将脚本文件复制到“Resources”目录。

    查找脚本资源的URL

    将脚本作为资源包含后,您需要找到指向文件系统上其位置的URL。幸运的是,Cocoa使这很容易做到:

    NSURL* url = [[NSBundle mainBundle] URLForResource:@"code39" withExtension:@"js"];
    

    您获得的url是应用包内code39.js文件的绝对网址。从那里,将此URL插入另一个字符串应该是非常简单的,如下所示:

    NSString* html = [NSString stringWithFormat:@"<script src='%@'>", url];
    

    加载HTML后,UIWebView将拥有您脚本的完整网址,并且应该执行。这个方法适用于我刚为iOS 6.0创建的测试项目。


    (附注:我强烈建议您将HTML内容与源代码分开。您可以轻松调整上述方法,将纯文本文件的内容读入NSString。)

答案 1 :(得分:2)

在Xcode中打开项目。转到“目标”并查看“编译源”。如果您在该文件夹中看到您的js文件,请将其移至“Copy Bundle Resources”文件夹并从“Compile Sources”文件夹中删除它。

答案 2 :(得分:1)

如果将js文件添加到项目中,希望以下代码可以正常工作。

[mainWebView loadHTMLString:temp baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

或 - 如果从服务器收到js文件,请将code39.js文件放在应用程序的文档文件夹中。

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *basePath = [paths objectAtIndex:0];
   NSURL *baseURL = [NSURL fileURLWithPath:basePath];
   [mainWebView loadHTMLString:temp baseURL:baseURL];

希望这能解决问题:)

答案 3 :(得分:0)

好吧,它有点复杂。如果它是一个html文件,只需使用相对路径。如果html是write是objective-c代码,你需要设置一个http服务器,如https://github.com/robbiehanson/CocoaHTTPServer,并使用js的绝对路径。