2011-01-13 93 views
4

我的开发团队已经构建了一个成功的iOS通用应用程序,可将复杂的HTML5网络应用程序与iPhone/iPad同步。这些应用程序从本地文件系统加载到UIWebView中。我们最近使用MessageUI.framework添加了应用内电子邮件。如何解决iOS UIWebView DOM异常18?

一切都很顺利,直到我们的QA部门确定了一个用例,其中MailCompose类的实例导致UIWebView引发SECURITY_ERR:DOM Exception 18错误。这只发生在iOS 4.2.1上。该应用程序在针对SDK 4.1构建时正常运行,并且安装在运行iOS 4.1的设备上。这感觉就像iOS 4.2的bug或者iOS 4.2中出现的HTML5问题。

我正在寻找技术来找到SECURITY_ERR的原因:DOM异常18.我知道这个错误是某种同源异常,但它没有意义,为什么它在4.1上工作,但没有意义4.2。为什么MailCompose类会导致此问题?

任何帮助都将不胜感激!

+0

您是否能够破解这种情况?,米面对相同? – 2012-06-07 05:48:55

回答

2

请问您如何从本地FS加载您的html源代码? 还有什么您的MailCompose类做的,与文档加载到UIWebView交互?

如果您正在将html文件的内容读入字符串,然后将其加载到UIWebView中,则必须更改它,并使用file://协议加载它。

NSString *html = [NSString stringWithContentsOfFile:[path stringByAppendingString:@"path to the html file"] encoding:NSUTF8StringEncoding error:NULL]; 
[webView loadHTMLString:html baseURL:baseURL]; 

继续前进,并通过加载的NSURLRequest实际的HTML文件:

不必加载HTML源代码以字符串形式(file://网址)

NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSURL *baseURL = [NSURL fileURLWithPath:[path stringByAppendingString:@"path and file name of the file"]]; 
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL]; 
[webView loadRequest:request]; 

这样做,使访问window.localStorage,window.openDatabase和其他对象。

干杯

+1

事实上,我正在按照你的建议加载NSURLRequest的HTML。而且我们已经广泛使用了window.localStorage和window.openDatabase。我现在能够通过在显示MailCompose操作表之前从内存中完全删除带有UIWebView的UIViewController来避免DOM异常。但我永远无法确定DOM异常发生的原因。顺便说一句,MailCompose是MessageUI.framework&MFMailComposeViewController的一部分。 – user573507 2011-01-19 17:31:08