我正在尝试使mailto链接与UIWebView一起使用。

到目前为止,我正在使用下面的委托来打开一系列内容(http://,file://等),并且它们都可以正常工作。但是,好像mailto甚至没有到达那里,如果我为传递给它的每个URL发出警报,其他所有警报都会发出警报,但是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];

[...]

关于“mailto”链接为什么会被忽略并引发错误的任何想法?

最佳答案

以下两行是原因:

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

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

通常,最好检查一下您的输入(在这种情况下为URL。您不能假设URL总是像“protocol://domain.com/something/something-else”那样。在许多情况下在这里(如相对路径)。

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

关于ios - UIWebView忽略mailto,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26358065/

10-13 04:24