UIWebView忽略mailto

时间:2014-10-14 10:06:15

标签: ios objective-c uiwebview mailto

我正在尝试使用UIWebView获取mailto链接。

到目前为止,我正在使用下面的代理打开一系列内容(http://,file:// etc),它们都可以正常工作。然而,似乎mailto甚至没有到达那里,如果我对传入其中的每个网址发出警报,所有其他人都会发出警报,但没有任何邮件链接。

Xcode会抛出

WebKit discarded an uncaught exception in the webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener: delegate: <NSRangeException> *** -[__NSArrayI objectAtIndex:]: index 4294967295 beyond bounds [0 .. 0]

代表

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

NSURL *url = request.URL;
NSArray *components = [url.absoluteString componentsSeparatedByString:@"/"];
NSString *folder = [components objectAtIndex:[components count]-2];

UIAlertView *display_url = [[UIAlertView alloc]initWithTitle:@"Warning" message:[NSString stringWithFormat:@"URL %@ ", request.URL.scheme] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

[display_url show];

[...]

关于为什么&#34; mailto&#34;链接将被忽略并抛出错误?

1 个答案:

答案 0 :(得分:2)

这两行是原因:

NSArray *components = [url.absoluteString componentsSeparatedByString:@"/"];
NSString *folder = [components objectAtIndex:[components count]-2];

根据the RFCmailto:网址中没有斜杠。因此components数组只包含1个对象(整个URL)。然后,您在索引-1处请求一个对象,该对象将引发异常。 WebKit似乎捕获了异常(否则您的应用会崩溃)并显示您发布的消息。

一般来说,检查输入是个好主意(在这种情况下是URL。您不能认为URL总是像“protocol://domain.com/something/something-else”。这里有很多可能的情况(比如相对路径)。

至于解析mailto个网址,您可以在this answer中找到一个示例。