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

Pra*_*Raj 1 html javascript iphone uiwebview ios

我正在尝试在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];
Run Code Online (Sandbox Code Playgroud)

所以这是问题所在:

<script type='text/javascript' src='code39.js'>
Run Code Online (Sandbox Code Playgroud)

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

请帮忙...

jmk*_*jmk 11

最简单的解决方案

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

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


备选方案:将脚本添加为资源

您可以将JavaScript文件添加为要包含在应用程序包中的资源文件.要做到这一点,只需添加code39.js到您的Xcode项目.

请注意,默认情况下,Xcode会将.js文件添加到"编译源"构建阶段.你想要这个; 您希望将文件视为资源.谢天谢地,它很容易修复:

  1. 选择顶级项目以访问其设置.
  2. 单击您的应用程序目标,然后选择"构建阶段".
  3. .js文件拖出"编译源"部分并进入"复制包资源"部分.

这将确保Xcode在您构建应用程序时将脚本文件复制到"Resources"目录.

查找脚本资源的URL

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

NSURL* url = [[NSBundle mainBundle] URLForResource:@"code39" withExtension:@"js"];
Run Code Online (Sandbox Code Playgroud)

url你回来是绝对URL到code39.js您的应用程序包内的文件.从那里,将此URL插入另一个字符串应该是非常简单的,如下所示:

NSString* html = [NSString stringWithFormat:@"<script src='%@'>", url];
Run Code Online (Sandbox Code Playgroud)

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


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