【发布时间】:2011-12-12 00:17:36
【问题描述】:
也许这和这个问题类似,没有回复: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 标签,像这样:
<script type="text/javascript" src="./myscript.js" />
如果我删除脚本标记,则页面在 iOS5 中加载并呈现良好。而且我可以看出,css文件的引用方式与脚本.js文件的引用方式相同。
如果我保留脚本标签但将 myscript.js 文件完全清空,它仍然无法加载。
对我来说,这似乎是某种跨站点脚本问题 - 因为 WebView 认为它应该禁止加载脚本(实际上,不允许渲染页面??)
不知道从这里去哪里。想法?
更新
这感觉越来越像跨站点脚本问题。如果我删除它可以工作的标签,尽管没有脚本。我的所有图像都是从 baseURL 加载的,我的样式表也是如此。也就是说,我们知道 baseURL 正在工作。
如果我用脚本文件的实际内容替换标记,那么它就可以工作,所以问题不在于脚本本身。
仍在寻找确认和其他想法来规避。不得不将脚本本身修补到 html 中对我来说很不方便,但这是迄今为止我最好的解决方案。或者,我可以将 html 写入文件系统并通过 loadRequest 加载,但同样,这不是我的首选。
更新 2
感谢@djromero,我有一个解决方案。我的文档是一个 XHTML 文档,因此使用了一个自动关闭的脚本标签(没有内容,只有属性。)但loadHTMLString:baseURL: 显然假定 MIMEType 为text/html,UIWebView 现在显然对其进行了更严格的解释——并且在@987654326 @ 文档,您可能没有自闭合标签。
我的解决方案是切换到loadData:MIMEtype:baseURL: 并将application/xhtml+xml 指定为mime 类型。我可以使用dataUsingEncoding: 从我的 NSString 轻松构造 NSData。
【问题讨论】:
标签: iphone ios ipad uiwebview ios5