UIWebView loadHTMLString在iOS5中不起作用
也许这是类似于这个问题,没有任何反应: loadHTMLString不适用于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认为它应该禁止加载脚本(事实上,禁止呈现页面?)
不知道从哪里去。 想法?
UPDATE
这感觉越来越像一个跨站点脚本问题。 如果我删除它的标签,虽然sans脚本。 我所有的图像都是从baseURL加载的,就像我的样式表一样。 也就是说,我们知道baseURL正在工作。
如果我用我的脚本文件的实际内容replace标签,那么它的工作原理,所以问题不是脚本本身。
仍然在寻找确认和额外的想法来规避。 我不得不将脚本本身修补到html中,但这是我迄今为止最好的解决scheme。 或者我可以写html到文件系统,并通过loadRequest加载,但是,不是我的第一select。
更新2
感谢@djromero我有一个解决scheme。 我的文档是一个XHTML文档,因此使用了一个自我closures的脚本标签(没有内容,只是属性)。但是, loadHTMLString:baseURL:
显然假设一个loadHTMLString:baseURL:
的text/html
,UIWebView显然现在解释更严格 – text/html
文件,你可能没有自我closures标签。
我的解决scheme是切换到loadData:MIMEtype:baseURL:
并指定application/xhtml+xml
作为MIMEtypes。 我可以使用dataUsingEncoding:
从我的NSString构造NSData。
我不是一个HTML标准专家,但是…您是否尝试closures<script>
标记:
<script type="text/javascript" src="./myscript.js"> </script>
<script type="text/javascript" src="./myscript.js"> </script>
它为我工作。
加载包含embedded式文件夹引用(例如“/file.js”)的HTML文件的方法是将其加载为URL而不是STRING。
NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"htm"]; NSURL *url = [NSURL fileURLWithPath:urlAddress]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [webView loadRequest:requestObj];
我将它与引用的文件夹(未引用的文件)一起用于在Xcode中创build一个普通的网站结构,在embedded的index.htm文件中使用js /和css /和images / references,例如
<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script>
UPDATE
我不认为在加载的HTMLstring中引用URI是正式的支持。 如果您必须使用string,则在将其加载到UIWebView之前,将所需的资源文件加载到string中。