当我尝试在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中加载它。
请帮忙......
答案 0 :(得分:11)
假设您的应用程序附带了JavaScript代码,并且无法通过网络获取它,一个简单的解决方案是使您的JavaScript代码内联而不是外部资源。也就是说,您可以将code39.js
的内容放在<script>
标记之间,就像您的其他JavaScript代码一样。
当然,如果您想添加大量代码,并且HTML进一步复杂化,这种方法效果不佳。你的NSString
声明会很快(甚至更多)变得笨拙!
您可以将JavaScript文件添加为要包含在应用包内的资源文件。为此,只需将code39.js
添加到Xcode项目中即可。
请注意,默认情况下,Xcode会将.js
个文件添加到“编译源”构建阶段。你不想要这个;您希望将文件视为资源。值得庆幸的是,它很容易解决:
.js
文件拖出“编译源”部分并进入“复制包资源”部分。这将确保Xcode在您构建应用程序时将脚本文件复制到“Resources”目录。
将脚本作为资源包含后,您需要找到指向文件系统上其位置的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)