UIWebView loadHTMLString在iOS5中不起作用

Tom*_*ift 14 iphone uiwebview ipad ios ios5

也许这类似于这个问题,没有回应: loadHTMLString不能使用iOS5?

我有一个UIWebView,我使用loadHTMLString填充:baseURL:.HTML小而简单,它引用了一个css样式表和一个javascript脚本,它们通过baseURL:加载,它被设置为app的bundle内的一个目录.

    // load the html
    NSString* filePath = [NSString stringWithFormat: @"%@/html", [[NSBundle mainBundle] resourcePath ] ];
    [_pCurrentWebView loadHTMLString: html baseURL: [NSURL fileURLWithPath: filePath isDirectory: YES ] ];
Run Code Online (Sandbox Code Playgroud)

这在过去一直很有效,但在iOS5中已经破产了.在iOS5中,UIWebView中不显示任何内容.webview确实提供了所有预期的事件 - 例如,shouldLoadRequest,didStartLoad,didFinishLoad等.

html有一个脚本标记,如下所示:

<script type="text/javascript" src="./myscript.js" />
Run Code Online (Sandbox Code Playgroud)

如果我删除脚本标记,那么页面加载并在iOS5中呈现正常.我可以说,加载并应用了与脚本.js文件引用方式相同的css文件.

如果我保留脚本标记但使myscript.js文件完全为空,则仍然无法加载.

对我来说,这似乎是某种跨站点脚本问题 - 因为WebView认为它应该禁止加载脚本(事实上,不允许渲染页面?)

不知道从哪里开始.想法?

UPDATE

这种感觉越来越像跨站点脚本问题.如果我删除它的标签,虽然没有脚本.我的所有图像都是从baseURL加载的,我的样式表也是如此.也就是说,我们知道baseURL正在运行.

如果我用我的脚本文件的实际内容替换标签然后它工作,所以问题不是脚本本身.

仍在寻找确认和其他想法来规避.我不方便将脚本本身修补到html中,但这是我迄今为止最好的解决方案.或者,我可以将html写入文件系统并通过loadRequest加载,但同样,不是我的第一选择.

更新2

感谢@djromero我有一个解决方案.我的文档是一个XHTML文档,因此使用了一个自动关闭的脚本标记(没有内容,只是属性.)但loadHTMLString:baseURL:显然假设一个MIMEType text/html,UIWebView显然现在更严格地解释 - 并且在text/html文档中你可能没有自我关闭标记.

我的解决方案是切换到loadData:MIMEtype:baseURL:并指定application/xhtml+xml为mime类型.我可以使用我的NSString轻松构造NSData dataUsingEncoding:.

djr*_*ero 11

我不是HTML标准专家,但是......你试图关闭<script>标签:


<script type="text/javascript" src="./myscript.js"></script>

它对我有用.

  • @mAc - 自闭项标签在XHTML中有效,但在HTML中无效.问题是loadHTMLString假定mime类型为'text/html',而iOS5中的严格解析不允许HTML的自动关闭标记 - 仅适用于XHTML.我的修复是使用loadData:MIMEType:baseURL:相反,将"application/xhtml + xml"作为mime类型传递.我可以轻松地将我的html字符串复制到NSData中. (3认同)