也许这与此问题相似,但没有回复:loadHTMLString Not Working With iOS5?
我有一个UIWebView,我使用loadHTMLString填充:baseURL:。 HTML小而简单,它引用了一个css样式表和一个javascript脚本,它们通过baseURL:加载,它被设置为应用程序包中的目录。
// load the html
NSString* filePath = [NSString stringWithFormat: @"%@/html", [[NSBundle mainBundle] resourcePath ] ];
[_pCurrentWebView loadHTMLString: html baseURL: [NSURL fileURLWithPath: filePath isDirectory: YES ] ];
这在过去一直很有效,但在iOS5中已经破产了。在iOS5中,UIWebView中不显示任何内容。 webview确实提供了所有预期的事件 - 例如shouldLoadRequest,didStartLoad,didFinishLoad等。
html有一个脚本标记,如下所示:
<script type="text/javascript" src="./myscript.js" />
如果删除脚本标记,则页面加载并在iOS5中呈现正常。我可以说,加载并应用了与脚本.js文件引用方式相同的css文件。
如果我保留脚本标记但是将myscript.js文件完全清空,它仍然无法加载。
对我而言,这似乎是某种跨站点脚本问题 - 因为WebView认为它应该禁止加载脚本(事实上,不允许渲染页面?)
不知道从哪里开始。想法?
更新
这种感觉越来越像跨站点脚本问题。如果我删除它的标签,虽然没有脚本。我的所有图像都是从baseURL加载的,我的样式表也是如此。也就是说,我们知道baseURL正在运行。
如果我将标签替换为我的脚本文件的实际内容,那么它可以工作,所以问题不在于脚本本身。
仍在寻找确认和其他想法来规避。我不方便将脚本本身修补到html中,但这是我迄今为止最好的解决方案。或者我可以将html写入文件系统并通过loadRequest加载,但同样不是我的第一选择。
更新2
感谢@djromero我有一个解决方案。我的文档是一个XHTML文档,因此使用了一个自动关闭的脚本标记(没有内容,只是属性。)但loadHTMLString:baseURL:
显然假设MIM text/html
类型,UIWebView现在显然更严格地解释 - 在text/html
文档中,您可能没有自我结束标记。
我的解决方案是切换到loadData:MIMEtype:baseURL:
并指定application/xhtml+xml
作为mime类型。我可以使用dataUsingEncoding:
从我的NSString轻松构造NSData。
答案 0 :(得分:11)
我不是HTML标准专家,但是......您是否尝试关闭<script>
代码:
<script type="text/javascript" src="./myscript.js"></script>
它对我有用。
答案 1 :(得分:1)
加载包含嵌入式文件夹引用的HTML文件(如“/file.js”)的方法是将其加载为URL而不是STRING。
NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"htm"];
NSURL *url = [NSURL fileURLWithPath:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
我使用它和引用的文件夹(不是引用的文件)在Xcode中创建一个普通的网站结构,在嵌入的index.htm文件中使用js /和css /和images / references,例如
<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script>
<强>更新强>
我认为没有正式支持在加载的HTML字符串中引用URI。如果必须使用字符串,则在将所需资源文件加载到UIWebView之前将其加载到字符串中。