2

当我尝试在 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

4 回答 4

11

最简单的解决方案

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

当然,如果您想添加大量代码,这不会很好地工作,并且会使您的 HTML 进一步复杂化。您的NSString声明将很快变得(甚至更多)笨拙!


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

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

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

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

这将确保 Xcode 在您构建应用程序时将脚本文件复制到“资源”目录。

查找脚本资源的 URL

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

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

url您返回的是应用程序包中文件的绝对URL code39.js。从那里,将这个 URL 插入另一个字符串应该很简单,如下所示:

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

加载 HTML 后,UIWebView将具有脚本的完整 URL,并且应该执行。此方法在我刚刚为 iOS 6.0 创建的测试项目中有效。


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

于 2012-10-17T05:59:37.253 回答
2

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

于 2012-10-17T06:32:50.057 回答
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];

希望这能解决问题:)

于 2013-03-13T11:37:22.133 回答
0

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

于 2012-10-17T05:04:32.047 回答