¿Cómo solucionar problemas iOS UIWebView DOM Excepción 18?

Mi equipo de desarrolladores ha creado una exitosa aplicación universal para iOS que sincroniza sofisticadas aplicaciones web HTML5 con un iPhone / iPad. Las aplicaciones se cargan en el UIWebView desde el sistema de files local. Recientemente agregamos correos electrónicos en la aplicación usando MessageUI.framework.

Todo iba bien hasta que nuestro departamento de control de calidad identificó un caso de uso donde la instanciación de la class MailCompose provoca que el UIWebView lance un error SECURITY_ERR: DOM Excepción 18. Esto SOLO ocurre en iOS 4.2.1. La aplicación funciona normalmente cuando está construida contra SDK 4.1 e instalada en un dispositivo con iOS 4.1. Esto SIENTE como un error de iOS 4.2 o un problema de HTML5 que apareció en iOS 4.2.

Estoy buscando técnicas para encontrar la causa de la SECURITY_ERR: DOM Excepción 18. Sé que este error es una exception de origen idéntico de algún tipo, pero no tiene sentido por qué funciona en 4.1 pero no en 4.2. ¿Y por qué la class MailCompose causa el problema?

Cualquier ayuda en absoluto será muy apreciada!

¿Puedo preguntar cómo cargar su fuente html desde el FS local? Además, ¿qué hace su class MailCompose para interactuar con el documento cargado en el UIWebView?

Si está leyendo el contenido de un file html en una cadena y luego lo carga en UIWebView, debe cambiarlo y cargarlo utilizando el protocolo file:// .

En lugar de cargar el origen html como una cadena:

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

Siga adelante y cargue el file html real a través de un NSURLRequest (file: // url)

 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]; 

Al hacerlo, habilita el acceso a window.localStorage, window.openDatabase y otros objects.

Aclamaciones