Iphone UIWebView加载HtmlString在iOS5中不工作

Iphone UIWebView加载HtmlString在iOS5中不工作,iphone,ios,ipad,uiwebview,ios5,Iphone,Ios,Ipad,Uiwebview,Ios5,也许这与这个没有答案的问题类似: 我有一个UIWebView,我使用loadHTMLString:baseURL:填充它。HTML小而简单,它引用了一个css样式表和一个javascript脚本,这些脚本通过baseURL:加载,baseURL:设置为应用程序包中的一个目录 // load the html NSString* filePath = [NSString stringWithFormat: @"%@/html", [[NSBundle mainBundle] res

也许这与这个没有答案的问题类似:

我有一个UIWebView,我使用loadHTMLString:baseURL:填充它。HTML小而简单,它引用了一个css样式表和一个javascript脚本,这些脚本通过baseURL:加载,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" />

如果我删除了script标记,那么页面将在iOS5中加载并呈现良好。我可以看出css文件已经加载并应用,它的引用方式与script.js文件相同

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

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

不知道从这里到哪里去。想法

更新

这越来越像是一个跨站点脚本问题。如果我删除标记,它会工作,尽管是sans脚本。我的所有图像都是从baseURL加载的,我的样式表也是如此。也就是说,我们知道baseURL正在工作

如果我用脚本文件的实际内容替换标记,那么它就会工作,所以问题不在于脚本本身

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

更新2

多亏了@djromero,我有了一个解决方案。我的文档是一个XHTML文档,因此使用了一个自动关闭的脚本标记(没有内容,只有属性)。但是
loadHTMLString:baseURL:
显然采用了
text/html
的MIMEType,UIWebView现在显然对其进行了更严格的解释,并且在
text/html
文档中,您可能没有自动关闭标记


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

加载包含嵌入式文件夹引用(如“/file.js”)的HTML文件的方法是将其加载为URL而不是字符串

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/引用,例如

<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script>

更新


我认为官方不支持在加载的HTML字符串中引用URI。如果必须使用字符串,请先将所需的资源文件加载到字符串中,然后再将其加载到UIWebView中。

我不是HTML标准专家,但是……您是否尝试关闭
标记:


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


这对我很有效。

是的,这并不能回答我的问题。我知道我可以使用loadRequest:,但我的html并不是以文件的形式存在于任何地方——它是动态生成的。loadHTMLString:在iOS2-iOS4中工作,我想了解它为什么会坏,以及如何让它重新工作。我明白了-我甚至不知道它应该与loadHTMLString一起工作-我在我的第一次嵌入式应用尝试中尝试过,但它遇到了与您描述的相同的问题。我试图避免回答“它不应该工作”;-)。您也可以在将js加载到webview之前将其加载到字符串中。在加载的HTML字符串中引用URI适用于图像、css样式表等,并用于脚本文件。如果有文档表明它不受支持,那就这样吧。但我想在放弃之前看看医生。如果这是不受支持的,那么为什么使用baseURL:参数呢?第二个,加上18个答案描述了您的解决方案:是的,我知道这个技巧,并尝试过。它适用于iOS3和iOS4,但不适用于iOS5。老兄,他已经像这样关闭了它。所以没有必要单独关闭它,我会被诅咒的。将脚本close tage从更改为确实有效!我想这就是原因:。IOS5必须有一个更兼容/更严格的HTML解析器。@mAc:你知道,带的结束标记不是普遍有效的。@mAc-自动结束标记在XHTML中有效,但在HTML中无效。问题在于loadHTMLString假定mime类型为“text/html”,而iOS5中的严格解析不允许html使用自动关闭标记—仅允许XHTML使用。我的修复方法是使用loadData:MIMEType:baseURL:代替,将“application/xhtml+xml”作为mime类型传递。我可以很容易地将我的html字符串复制到NSData中。哦。。!!!!现在我明白了。好的,谢谢“汤姆斯威夫特”和“madmw”。你在我的知识中又增加了一件事……:)