2011-01-13 128 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