【问题标题】:How to troubleshoot iOS UIWebView DOM Exception 18?如何解决 iOS UIWebView DOM 异常 18?
【发布时间】:2011-01-13 01:00:31
【问题描述】:

我的开发团队已经构建了一个成功的 iOS 通用应用程序,它将复杂的 HTML5 网络应用程序同步到 iPhone / iPad。应用程序从本地文件系统加载到 UIWebView。我们最近使用 MessageUI.framework 添加了应用内电子邮件。

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

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

任何帮助都将不胜感激!

【问题讨论】:

  • 你能破解这种情况吗?,我面临同样的情况?

标签: exception dom ios html uiwebview


【解决方案1】:

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

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

而不是将html源作为字符串加载:

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

继续并通过 NSURLRequest (file:// url) 加载实际的 html 文件

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 和其他对象。

干杯

【讨论】:

  • 事实上,我正在按照您的建议使用 NSURLRequest 加载 HTML。我们已经在广泛使用 window.localStorage 和 window.openDatabase。我现在能够通过在显示 MailCompose 操作表之前从内存中完全删除带有 UIWebView 的 UIViewController 来避免 DOM 异常。但是我永远无法确定为什么会发生 DOM 异常。顺便说一句,MailCompose 是 MessageUI.framework 和 MFMailComposeViewController 的一部分。
  • 谢谢,通过 NSURLRequest 加载页面为我解决了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2013-01-09
  • 1970-01-01
  • 2013-03-12
  • 2012-11-29
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多