UIWebView loadHTMLString在iOS5中不起作用

时间:2011-10-20 17:59:57

标签: iphone ios ipad uiwebview ios5

也许这与此问题相似,但没有回复: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。

2 个答案:

答案 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之前将其加载到字符串中。